From cb0f5e6508bf73027cdaa584ed4d92442b446807 Mon Sep 17 00:00:00 2001 From: Gidon Kessler Date: Thu, 12 Feb 2026 10:16:58 +1100 Subject: [PATCH] refator: dedup logger configuration between dev and prod --- pkg/logger/configure.go | 90 ++++++++++------------------------------- 1 file changed, 22 insertions(+), 68 deletions(-) diff --git a/pkg/logger/configure.go b/pkg/logger/configure.go index c8c1d31..2fc45e7 100644 --- a/pkg/logger/configure.go +++ b/pkg/logger/configure.go @@ -54,58 +54,30 @@ var BuildInfoRevision = func() string { // ConfigureDevelopmentLogger configures a development logger which is more human readable instead of JSON func ConfigureDevelopmentLogger(ctx context.Context, level string, syncs ...io.Writer) (context.Context, error) { - // configure level - zapLevel, err := zapcore.ParseLevel(level) - if err != nil { - zap.L().Error("failed to parse log level, using info", zap.Error(err)) - zapLevel = zapcore.InfoLevel - } - - var writers []io.Writer - if len(syncs) > 0 { - writers = syncs - } else { - writers = []io.Writer{os.Stdout} - } - - // Convert io.Writers to zapcore.WriteSyncers - writeSyncers := make([]zapcore.WriteSyncer, len(writers)) - for i, writer := range writers { - writeSyncers[i] = zapcore.AddSync(writer) - } - - // Combine multiple syncs into a single WriteSyncer - multiSync := zapcore.NewMultiWriteSyncer(writeSyncers...) - - version := Version - if version == "" { - version = BuildInfoRevision - } - - zapLogger := zap.New( - zapcore.NewCore( - zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()), - multiSync, - zapLevel, - ), - zap.AddCaller(), - zap.AddCallerSkip(1), - zap.Fields(zap.String("version", version)), - ) - zap.ReplaceGlobals(zapLogger) + encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig()) + return configureLogger(ctx, level, "dev-logger", encoder, syncs...) +} - ctx, err = configureOTel(ctx, "dev-logger") - if err != nil { - return nil, err +func ConfigureProductionLogger(ctx context.Context, level string, syncs ...io.Writer) (context.Context, error) { + encoderConfig := zapcore.EncoderConfig{ + TimeKey: "timestamp", + LevelKey: "level", + NameKey: "logger", + CallerKey: "caller", + MessageKey: "msg", + StacktraceKey: "stacktrace", + LineEnding: zapcore.DefaultLineEnding, + EncodeLevel: zapcore.LowercaseLevelEncoder, + EncodeTime: zapcore.ISO8601TimeEncoder, + EncodeDuration: zapcore.StringDurationEncoder, + EncodeCaller: zapcore.FullCallerEncoder, } - - l := &logger{underlyingLogger: zapLogger} - ctx = l.InjectIntoContext(ctx) - return ctx, nil + encoder := zapcore.NewJSONEncoder(encoderConfig) + return configureLogger(ctx, level, "prod-logger", encoder, syncs...) } -// ConfigureProductionLogger configures a JSON production logger -func ConfigureProductionLogger(ctx context.Context, level string, syncs ...io.Writer) (context.Context, error) { +func configureLogger(ctx context.Context, level, scopeName string, encoder zapcore.Encoder, syncs ...io.Writer) (context.Context, error) { + // configure level zapLevel, err := zapcore.ParseLevel(level) if err != nil { zap.L().Error("failed to parse log level, using info", zap.Error(err)) @@ -128,38 +100,20 @@ func ConfigureProductionLogger(ctx context.Context, level string, syncs ...io.Wr // Combine multiple syncs into a single WriteSyncer multiSync := zapcore.NewMultiWriteSyncer(writeSyncers...) - encoderConfig := zapcore.EncoderConfig{ - TimeKey: "timestamp", - LevelKey: "level", - NameKey: "logger", - CallerKey: "caller", - MessageKey: "msg", - StacktraceKey: "stacktrace", - LineEnding: zapcore.DefaultLineEnding, - EncodeLevel: zapcore.LowercaseLevelEncoder, - EncodeTime: zapcore.ISO8601TimeEncoder, - EncodeDuration: zapcore.StringDurationEncoder, - EncodeCaller: zapcore.FullCallerEncoder, - } - version := Version if version == "" { version = BuildInfoRevision } zapLogger := zap.New( - zapcore.NewCore( - zapcore.NewJSONEncoder(encoderConfig), - multiSync, - zapLevel, - ), + zapcore.NewCore(encoder, multiSync, zapLevel), zap.AddCaller(), zap.AddCallerSkip(1), zap.Fields(zap.String("version", version)), ) zap.ReplaceGlobals(zapLogger) - ctx, err = configureOTel(ctx, "prod-logger") + ctx, err = configureOTel(ctx, scopeName) if err != nil { return nil, err }