Files
go-github-sync/pkg/logger/logger.go
2025-05-09 22:15:44 -04:00

50 lines
1.1 KiB
Go

// Package logger provides structured logging functionality.
package logger
import (
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
// Logger wraps zap.Logger to provide a simpler interface.
type Logger struct {
*zap.SugaredLogger
}
// New creates a new Logger instance.
func New(debug bool) *Logger {
level := zapcore.InfoLevel
if debug {
level = zapcore.DebugLevel
}
encoderConfig := zapcore.EncoderConfig{
TimeKey: "time",
LevelKey: "level",
NameKey: "logger",
CallerKey: "caller",
MessageKey: "msg",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: zapcore.ISO8601TimeEncoder,
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
}
core := zapcore.NewCore(
zapcore.NewConsoleEncoder(encoderConfig),
zapcore.Lock(os.Stdout),
level,
)
return &Logger{zap.New(core).Sugar()}
}
// With adds structured context to the logger.
func (l *Logger) With(args ...interface{}) *Logger {
return &Logger{l.SugaredLogger.With(args...)}
}