Simplify log source to file.go:line format

Replace verbose source object with simple "file.go:line" string
for cleaner log output.
This commit is contained in:
Jeffrey Paul 2026-01-08 16:13:56 -08:00
parent 982accd549
commit 6ab0d4a5b9

View File

@ -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,
})
}