| 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() |
| } |