journal/journslog/level_map.go

58 lines
1.6 KiB
Go
Raw Permalink Normal View History

2026-01-18 13:47:50 +00:00
package journslog
import (
"log/slog"
"src.lwithers.me.uk/go/journal"
)
// LevelMapper maps [slog.Level] values onto [journal.Priority] values.
type LevelMapper interface {
LevelMap(slogLevel slog.Level) journal.Priority
}
// DefaultLevelMapper returns a [LevelMapper] with the package's default
// behaviour.
//
// The mapping for the four defined [slog.Level] constants is as follows:
//
// slog.Level journal.Priority
// ---------- ----------------
// slog.LevelDebug (-4) journal.PriDebug
// slog.LevelInfo (0) journal.PriInfo
// slog.LevelWarn (4) journal.PriWarning
// slog.LevelError (8) journal.PriErr
//
// Other integer values are mapped as follows:
//
// integer slog.Level journal.Priority
// ------------------ ----------------
// -∞ ... -4 journal.PriDebug
// -3 ... 0 journal.PriInfo
// 1 ... 3 journal.PriNotice
// 4 ... 7 journal.PriWarning
// 8 journal.PriErr
// 9 ... ∞ journal.PriCrit
func DefaultLevelMapper() LevelMapper {
return &defaultLevelMapper{}
}
type defaultLevelMapper struct{}
func (*defaultLevelMapper) LevelMap(slogLevel slog.Level) journal.Priority {
switch {
case slogLevel <= slog.LevelDebug:
return journal.PriDebug
case slogLevel <= slog.LevelInfo:
return journal.PriInfo
case slogLevel < slog.LevelWarn:
return journal.PriNotice
case slogLevel < slog.LevelError:
return journal.PriWarning
case slogLevel == slog.LevelError:
return journal.PriErr
default:
return journal.PriCrit
}
}