blob: 9b17f80cf3794eed403f9d28858d8444032f4e29 [file] [log] [blame]
import (
_ "unsafe"
"time"
{{- if .NeedsVariables}}
"os"
"strings"
{{- end}}
// customized imports
{{- range $key, $value := .Imports}}
{{$key}} {{$value}}
{{- end}}
)
//go:linkname {{.GetGlobalOperatorLinkMethod}} {{.GetGlobalOperatorLinkMethod}}
var {{.GetGlobalOperatorLinkMethod}} func() interface{}
//go:linkname {{.SetGlobalLoggerLinkMethod}} {{.SetGlobalLoggerLinkMethod}}
var {{.SetGlobalLoggerLinkMethod}} func(v interface{})
{{- if .NeedsVariables}}
var {{.LogTracingEnableVarName}} = {{.LogTypeInConfig.Tracing.Enabled.ToGoBoolValue}}
var {{.LogTracingContextKeyVarName}} = {{.LogTypeInConfig.Tracing.Key.ToGoStringValue}}
var {{.LogReporterEnableVarName}} = {{.LogTypeInConfig.Reporter.Enabled.ToGoBoolValue}}
var {{.LogReporterLabelsVarName}} = {{.LogTypeInConfig.Reporter.LabelKeys.ToGoStringListValue}}
{{- end}}
type logReporter interface {
ReportLog(ctx, time interface{}, level, msg string, labels map[string]string)
GetLogContext(withEndpoint bool) interface{}
}
var {{.LogReportFuncName}} = func(ctx interface{}, time time.Time, level, msg string, labels map[string]string) {
op := {{.GetOperatorMethodName}}()
if op == nil {
return
}
op.LogReporter().(logReporter).ReportLog(ctx, time, level, msg, labels)
}
func initFunc() {
// for context.go getting operator
if {{.GetGlobalOperatorLinkMethod}} != nil {
// for operator delegator
{{.GetOperatorMethodName}} = func() {{.OperatorTypeName}} {
op := {{.GetGlobalOperatorLinkMethod}}()
if res, ok := op.({{.OperatorTypeName}}); ok {
return res
}
return nil
}
}
// for context.go change logger
{{- if .NeedsChangeLoggerFunc}}
if {{.SetGlobalLoggerLinkMethod}} != nil {
logType := {{.LogTypeInConfig.Type.ToGoStringValue}}
supportLogChange := false
if logType == "{{.ConfigTypeAutomaticValue}}" || logType == "{{.CurrentLogTypeName}}" {
supportLogChange = true
}
{{.ChangeLoggerMethodName}} = func(logger interface{}) {
if !supportLogChange {
return
}
// trying to change the logger if agent core existing
operator := {{.GetOperatorMethodName}}()
if operator != nil {
operator.ChangeLogger(logger)
return
}
// otherwise, change the global logger
{{.SetGlobalLoggerLinkMethod}}(logger)
}
}
{{- end}}
// init all log initiator
{{- range .InitFunctionNames}}
{{.}}()
{{- end}}
}
func init() {
initFunc()
}