make logger more clear with highlight component and use package name for default component

This commit is contained in:
Cytown 2026-03-29 18:22:25 +08:00
parent e70928cc6f
commit 42e3aaff35

View file

@ -21,6 +21,8 @@ const (
WARN = zerolog.WarnLevel WARN = zerolog.WarnLevel
ERROR = zerolog.ErrorLevel ERROR = zerolog.ErrorLevel
FATAL = zerolog.FatalLevel FATAL = zerolog.FatalLevel
Component = "component"
) )
var ( var (
@ -50,6 +52,18 @@ func init() {
// Custom formatter to handle multiline strings and JSON objects // Custom formatter to handle multiline strings and JSON objects
FormatFieldValue: formatFieldValue, FormatFieldValue: formatFieldValue,
PartsOrder: []string{
zerolog.TimestampFieldName,
zerolog.LevelFieldName,
Component,
zerolog.CallerFieldName,
zerolog.MessageFieldName,
},
FieldsExclude: []string{Component},
FormatPrepare: func(fields map[string]any) error {
fields[Component] = fmt.Sprintf("\x1b[33m%v\x1b[0m", fields[Component])
return nil
},
} }
logger = zerolog.New(consoleWriter).With().Timestamp().Caller().Logger() logger = zerolog.New(consoleWriter).With().Timestamp().Caller().Logger()
@ -193,7 +207,19 @@ func ConfigureFromEnv() {
} }
} }
func getCallerSkip() int { func getPackageNameFromFile(filePath string) string {
dir := filepath.Dir(filePath)
importPath := filepath.ToSlash(dir)
parts := strings.Split(importPath, "/")
if len(parts) == 0 {
return ""
}
return parts[len(parts)-1]
}
func getCallerSkip() (int, string) {
for i := 2; i < 15; i++ { for i := 2; i < 15; i++ {
pc, file, _, ok := runtime.Caller(i) pc, file, _, ok := runtime.Caller(i)
if !ok { if !ok {
@ -217,10 +243,10 @@ func getCallerSkip() int {
continue continue
} }
return i - 1 return i - 1, getPackageNameFromFile(file)
} }
return 3 return 3, "<unknown>"
} }
//nolint:zerologlint //nolint:zerologlint
@ -246,14 +272,16 @@ func logMessage(level LogLevel, component string, message string, fields map[str
return return
} }
skip := getCallerSkip() skip, pkg := getCallerSkip()
event := getEvent(logger, level) event := getEvent(logger, level)
if component != "" { if component == "" {
event.Str("component", component) component = pkg
} }
event.Str(Component, component)
appendFields(event, fields) appendFields(event, fields)
event.CallerSkipFrame(skip).Msg(message) event.CallerSkipFrame(skip).Msg(message)
@ -261,10 +289,7 @@ func logMessage(level LogLevel, component string, message string, fields map[str
if fileLogger.GetLevel() != zerolog.NoLevel { if fileLogger.GetLevel() != zerolog.NoLevel {
fileEvent := getEvent(fileLogger, level) fileEvent := getEvent(fileLogger, level)
if component != "" { fileEvent.Str(Component, component)
fileEvent.Str("component", component)
}
// fileEvent.Str("caller", fmt.Sprintf("%s:%d (%s)", callerFile, callerLine, callerFunc))
appendFields(fileEvent, fields) appendFields(fileEvent, fields)
fileEvent.CallerSkipFrame(skip).Msg(message) fileEvent.CallerSkipFrame(skip).Msg(message)