-
Notifications
You must be signed in to change notification settings - Fork 63
More log levels please #36
Copy link
Copy link
Closed
Description
Please consider adding more log levels by default, as I used to have more than one debug levels, just like we can use multiple -v for ssh to get different levels of debug info.
I'm proposing:
const (
LevelTrace = slog.Level(-8)
LevelDbg3 = slog.Level(-7)
LevelDbg2 = slog.Level(-6)
LevelDbg1 = slog.Level(-5)
LevelNotice = slog.Level(2)
LevelFatal = slog.Level(12)
)
var LevelNames = map[slog.Leveler]string{
LevelTrace: "TRC",
LevelDbg3: "D-3",
LevelDbg2: "D-2",
LevelDbg1: "D-1",
LevelNotice: "NTC",
LevelFatal: "FTL",
}
. . .
opts := &slog.HandlerOptions{
Level: LevelTrace,
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.LevelKey {
level := a.Value.Any().(slog.Level)
levelLabel, exists := LevelNames[level]
if !exists {
levelLabel = level.String()
}
a.Value = slog.StringValue(levelLabel)
}
return a
},
}
logger := slog.New(slog.NewTextHandler(os.Stdout, opts))
ctx := context.Background()
logger.Log(ctx, LevelDbg1, "Hidden debug message level1")
logger.Log(ctx, LevelDbg2, "Hidden debug message level2")
logger.Log(ctx, LevelDbg3, "Hidden debug message level3")
logger.Log(ctx, LevelTrace, "Trace message")
logger.Log(ctx, LevelNotice, "Notice message")
logger.Log(ctx, LevelFatal, "Fatal level")Which would give us:
time=... level=D-1 msg="Hidden debug message level1"
time=... level=D-2 msg="Hidden debug message level2"
time=... level=D-3 msg="Hidden debug message level3"
time=... level=TRC msg="Trace message"
time=... level=NTC msg="Notice message"
time=... level=FTL msg="Fatal level"
NB, I tried to put the above into tint, but got:
panic: interface conversion: interface {} is int64, not slog.Level
at my logger.Log(ctx, LevelDbg1 line.
Ref: https://betterstack.com/community/guides/logging/logging-in-go/#creating-custom-log-levels
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels