58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
|
|
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
|
||
|
|
}
|
||
|
|
}
|