From 8813fc89e2f24bb1420c09dfa664cc8842ef54e7 Mon Sep 17 00:00:00 2001 From: Cytown Date: Wed, 11 Mar 2026 11:22:09 +0800 Subject: [PATCH] fix for review --- pkg/logger/logger.go | 140 +++++---------------------------- pkg/logger/logger_3rd_party.go | 95 ++++++++++++++++++++++ 2 files changed, 115 insertions(+), 120 deletions(-) create mode 100644 pkg/logger/logger_3rd_party.go diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index aa99e1f6d..80adcf86c 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -128,6 +128,24 @@ func getCallerInfo() (string, int, string) { return "???", 0, "???" } +//nolint:zerologlint +func getEvent(logger zerolog.Logger, level LogLevel) *zerolog.Event { + switch level { + case zerolog.DebugLevel: + return logger.Debug() + case zerolog.InfoLevel: + return logger.Info() + case zerolog.WarnLevel: + return logger.Warn() + case zerolog.ErrorLevel: + return logger.Error() + case zerolog.FatalLevel: + return logger.Fatal() + default: + return logger.Info() + } +} + func logMessage(level LogLevel, component string, message string, fields map[string]any) { if level < currentLevel { return @@ -135,21 +153,7 @@ func logMessage(level LogLevel, component string, message string, fields map[str callerFile, callerLine, callerFunc := getCallerInfo() - var event *zerolog.Event - switch level { - case zerolog.DebugLevel: - event = logger.Debug() - case zerolog.InfoLevel: - event = logger.Info() - case zerolog.WarnLevel: - event = logger.Warn() - case zerolog.ErrorLevel: - event = logger.Error() - case zerolog.FatalLevel: - event = logger.Error() - default: - event = logger.Info() - } + event := getEvent(logger, level) // Build combined field with component and caller if component != "" { @@ -166,21 +170,7 @@ func logMessage(level LogLevel, component string, message string, fields map[str // Also log to file if enabled if fileLogger.GetLevel() != zerolog.NoLevel { - var fileEvent *zerolog.Event - switch level { - case zerolog.DebugLevel: - fileEvent = fileLogger.Debug() - case zerolog.InfoLevel: - fileEvent = fileLogger.Info() - case zerolog.WarnLevel: - fileEvent = fileLogger.Warn() - case zerolog.ErrorLevel: - fileEvent = fileLogger.Error() - case zerolog.FatalLevel: - fileEvent = fileLogger.Error() - default: - fileEvent = fileLogger.Info() - } + fileEvent := getEvent(fileLogger, level) if component != "" { fileEvent.Str("component", component) @@ -279,93 +269,3 @@ func FatalF(message string, fields map[string]any) { func FatalCF(component string, message string, fields map[string]any) { logMessage(FATAL, component, message, fields) } - -// Logger implements common Logger interface -type Logger struct { - component string - levels map[int]LogLevel -} - -// Debug logs debug messages -func (b *Logger) Debug(v ...any) { - logMessage(DEBUG, b.component, fmt.Sprint(v...), nil) -} - -// Info logs info messages -func (b *Logger) Info(v ...any) { - logMessage(INFO, b.component, fmt.Sprint(v...), nil) -} - -// Warn logs warning messages -func (b *Logger) Warn(v ...any) { - logMessage(WARN, b.component, fmt.Sprint(v...), nil) -} - -// Error logs error messages -func (b *Logger) Error(v ...any) { - logMessage(ERROR, b.component, fmt.Sprint(v...), nil) -} - -// Debugf logs formatted debug messages -func (b *Logger) Debugf(format string, v ...any) { - logMessage(DEBUG, b.component, fmt.Sprintf(format, v...), nil) -} - -// Infof logs formatted info messages -func (b *Logger) Infof(format string, v ...any) { - logMessage(INFO, b.component, fmt.Sprintf(format, v...), nil) -} - -// Warnf logs formatted warning messages -func (b *Logger) Warnf(format string, v ...any) { - logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) -} - -// Warningf logs formatted warning messages -func (b *Logger) Warningf(format string, v ...any) { - logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) -} - -// Errorf logs formatted error messages -func (b *Logger) Errorf(format string, v ...any) { - logMessage(ERROR, b.component, fmt.Sprintf(format, v...), nil) -} - -// Fatalf logs formatted fatal messages and exits -func (b *Logger) Fatalf(format string, v ...any) { - logMessage(FATAL, b.component, fmt.Sprintf(format, v...), nil) -} - -// Log logs a message at a given level with caller information -// the func name must be this because 3rd party loggers expect this -// msgL: message level (DEBUG, INFO, WARN, ERROR, FATAL) -// caller: unused parameter reserved for compatibility -// format: format string -// a: format arguments -// -//nolint:goprintffuncname -func (b *Logger) Log(msgL, caller int, format string, a ...any) { - level := LogLevel(msgL) - if b.levels != nil { - if lvl, ok := b.levels[msgL]; ok { - level = lvl - } - } - logMessage(level, b.component, fmt.Sprintf(format, a...), nil) -} - -// Sync flushes log buffer (no-op for this implementation) -func (b *Logger) Sync() error { - return nil -} - -// WithLevels sets log levels mapping for this logger -func (b *Logger) WithLevels(levels map[int]LogLevel) *Logger { - b.levels = levels - return b -} - -// NewLogger creates a new logger instance with optional component name -func NewLogger(component string) *Logger { - return &Logger{component: component} -} diff --git a/pkg/logger/logger_3rd_party.go b/pkg/logger/logger_3rd_party.go new file mode 100644 index 000000000..da50d686a --- /dev/null +++ b/pkg/logger/logger_3rd_party.go @@ -0,0 +1,95 @@ +// this file is for compatible with 3rd party loggers, should not be called in PicoClaw project + +package logger + +import "fmt" + +// Logger implements common Logger interface +type Logger struct { + component string + levels map[int]LogLevel +} + +// Debug logs debug messages +func (b *Logger) Debug(v ...any) { + logMessage(DEBUG, b.component, fmt.Sprint(v...), nil) +} + +// Info logs info messages +func (b *Logger) Info(v ...any) { + logMessage(INFO, b.component, fmt.Sprint(v...), nil) +} + +// Warn logs warning messages +func (b *Logger) Warn(v ...any) { + logMessage(WARN, b.component, fmt.Sprint(v...), nil) +} + +// Error logs error messages +func (b *Logger) Error(v ...any) { + logMessage(ERROR, b.component, fmt.Sprint(v...), nil) +} + +// Debugf logs formatted debug messages +func (b *Logger) Debugf(format string, v ...any) { + logMessage(DEBUG, b.component, fmt.Sprintf(format, v...), nil) +} + +// Infof logs formatted info messages +func (b *Logger) Infof(format string, v ...any) { + logMessage(INFO, b.component, fmt.Sprintf(format, v...), nil) +} + +// Warnf logs formatted warning messages +func (b *Logger) Warnf(format string, v ...any) { + logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) +} + +// Warningf logs formatted warning messages +func (b *Logger) Warningf(format string, v ...any) { + logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) +} + +// Errorf logs formatted error messages +func (b *Logger) Errorf(format string, v ...any) { + logMessage(ERROR, b.component, fmt.Sprintf(format, v...), nil) +} + +// Fatalf logs formatted fatal messages and exits +func (b *Logger) Fatalf(format string, v ...any) { + logMessage(FATAL, b.component, fmt.Sprintf(format, v...), nil) +} + +// Log logs a message at a given level with caller information +// the func name must be this because 3rd party loggers expect this +// msgL: message level (DEBUG, INFO, WARN, ERROR, FATAL) +// caller: unused parameter reserved for compatibility +// format: format string +// a: format arguments +// +//nolint:goprintffuncname +func (b *Logger) Log(msgL, caller int, format string, a ...any) { + level := LogLevel(msgL) + if b.levels != nil { + if lvl, ok := b.levels[msgL]; ok { + level = lvl + } + } + logMessage(level, b.component, fmt.Sprintf(format, a...), nil) +} + +// Sync flushes log buffer (no-op for this implementation) +func (b *Logger) Sync() error { + return nil +} + +// WithLevels sets log levels mapping for this logger +func (b *Logger) WithLevels(levels map[int]LogLevel) *Logger { + b.levels = levels + return b +} + +// NewLogger creates a new logger instance with optional component name +func NewLogger(component string) *Logger { + return &Logger{component: component} +}