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 } }