Skip to content

Commit

Permalink
promslog: Only log basename, not full path
Browse files Browse the repository at this point in the history
Signed-off-by: Julien <[email protected]>
  • Loading branch information
roidelapluie committed Oct 11, 2024
1 parent dae848d commit fdc50c7
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 2 deletions.
16 changes: 14 additions & 2 deletions promslog/slog.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,17 @@ var (
default:
}

return a
}
truncateSourceAttrFunc = func(groups []string, a slog.Attr) slog.Attr {
if a.Key != slog.SourceKey {
return a
}

if src, ok := a.Value.Any().(*slog.Source); ok {
a.Value = slog.StringValue(filepath.Base(src.File) + ":" + strconv.Itoa(src.Line))
}

return a
}
)
Expand Down Expand Up @@ -165,8 +176,9 @@ func New(config *Config) *slog.Logger {
}

logHandlerOpts := &slog.HandlerOptions{
Level: config.Level.lvl,
AddSource: true,
Level: config.Level.lvl,
AddSource: true,
ReplaceAttr: truncateSourceAttrFunc,
}

if config.Style == GoKitStyle {
Expand Down
44 changes: 44 additions & 0 deletions promslog/slog_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,3 +146,47 @@ func TestDynamicLevels(t *testing.T) {
})
}
}

func TestTruncateSourceFileName_DefaultStyle(t *testing.T) {
var buf bytes.Buffer

config := &Config{
Writer: &buf,
}

logger := New(config)
logger.Info("test message")

output := buf.String()

if !strings.Contains(output, "source=slog_test.go:") {
t.Errorf("Expected source file name to be truncated to basename, got: %s", output)
}

if strings.Contains(output, "/") {
t.Errorf("Expected no directory separators in source file name, got: %s", output)
}
}

func TestTruncateSourceFileName_GoKitStyle(t *testing.T) {
var buf bytes.Buffer

config := &Config{
Writer: &buf,
Style: GoKitStyle,
}

logger := New(config)
logger.Info("test message")

output := buf.String()

// In GoKitStyle, the source key is "caller".
if !strings.Contains(output, "caller=slog_test.go:") {
t.Errorf("Expected caller to contain basename of source file, got: %s", output)
}

if strings.Contains(output, "/") {
t.Errorf("Expected no directory separators in caller, got: %s", output)
}
}

0 comments on commit fdc50c7

Please sign in to comment.