今日已办
var Logger *otelzap.Logger
func init() {
var cfg zap.Config
logLevel, ok := LevelSetter()[strings.ToUpper(config.Profile.GetString("log.level"))]
if !ok {
logLevel = zapcore.InfoLevel
}
if logLevel == zap.DebugLevel {
cfg = zap.NewDevelopmentConfig()
} else {
cfg = zap.NewProductionConfig()
}
cfg.EncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
cfg.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
if export2OTLP(cfg.EncoderConfig, logLevel) == false {
Logger = otelzap.New(zap.New(zapcore.NewCore(zapcore.NewConsoleEncoder(cfg.EncoderConfig),
zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), logLevel)))
}
}
func export2OTLP(encoderConfig zapcore.EncoderConfig, logLevel zapcore.Level) bool {
if config.Profile.GetBool("log.enableLogOTLPExport") != true {
return false
}
ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
conn, err := grpc.DialContext(ctx, config.Profile.GetString("otelclient.endpoint"),
grpc.WithBlock(),
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithTimeout(time.Second*30))
if err != nil {
log.Println("failed to connect to otlp collector to export profile service logs with error:", err)
return false
}
logExportBatchSizeInt, err := strconv.Atoi(config.Profile.GetString("log.logExportBatchSize"))
if err != nil {
logExportBatchSizeInt = 1000
}
res := resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String(config.Profile.GetString("otelclient.serviceName")),
)
ws := zapcore.AddSync(zapotlpsync.NewOtlpSyncer(conn, zapotlpsync.Options{
BatchSize: logExportBatchSizeInt,
ResourceSchema: semconv.SchemaURL,
Resource: res,
}))
core := zapcore.NewTee(
zapcore.NewCore(zapotlpencoder.NewOTLPEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(ws), logLevel),
zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), logLevel),
)
zapLogger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
Logger = otelzap.New(zapLogger, otelzap.WithTraceIDField(true),
otelzap.WithStackTrace(true),
otelzap.WithMinLevel(logLevel))
Logger.Info("Enable export log by OTLP")
return true
}
- 创建合并请求
feature/profile-otelclient-log
明日待办