Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 22 additions & 68 deletions pkg/logger/configure.go
Original file line number Diff line number Diff line change
Expand Up @@ -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))
Expand All @@ -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
}
Expand Down
Loading