From 6ab0d4a5b90be6642c8d0403dafeb1bc9942614a Mon Sep 17 00:00:00 2001 From: sneak Date: Thu, 8 Jan 2026 16:13:56 -0800 Subject: [PATCH] Simplify log source to file.go:line format Replace verbose source object with simple "file.go:line" string for cleaner log output. --- internal/logger/logger.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/internal/logger/logger.go b/internal/logger/logger.go index a1574f5..7112735 100644 --- a/internal/logger/logger.go +++ b/internal/logger/logger.go @@ -2,8 +2,10 @@ package logger import ( + "fmt" "log/slog" "os" + "path/filepath" "runtime" "go.uber.org/fx" @@ -37,18 +39,30 @@ func New(_ fx.Lifecycle, params Params) (*Logger, error) { tty = true } + // replaceAttr simplifies the source attribute to "file.go:line" + replaceAttr := func(groups []string, a slog.Attr) slog.Attr { + if a.Key == slog.SourceKey { + if src, ok := a.Value.Any().(*slog.Source); ok { + a.Value = slog.StringValue(fmt.Sprintf("%s:%d", filepath.Base(src.File), src.Line)) + } + } + return a + } + var handler slog.Handler if tty { // Text output for development handler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ - Level: l.level, - AddSource: true, + Level: l.level, + AddSource: true, + ReplaceAttr: replaceAttr, }) } else { // JSON output for production handler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{ - Level: l.level, - AddSource: true, + Level: l.level, + AddSource: true, + ReplaceAttr: replaceAttr, }) }