{-# LANGUAGE OverloadedStrings, UnicodeSyntax #-}
module Magicbane.Logging (
module Magicbane.Logging
, module X
) where
import RIO
import System.Log.FastLogger
import System.Log.FastLogger as X (LogType(..), defaultBufSize)
type ModLogger = LogFunc
type Formatter = TimedFastLogger → CallStack → LogSource → LogLevel → Utf8Builder → IO ()
newLogger ∷ LogType → Formatter → IO (TimedFastLogger, ModLogger)
newLogger logtype formatter = do
tc ← newTimeCache simpleTimeFormat'
(fl, _) ← newTimedFastLogger tc logtype
return (fl, mkLogFunc $ formatter fl)
simpleFormatter ∷ Formatter
simpleFormatter logger cs src level msg =
logger $ \t →
toLogStr t <> " " <>
toLogStr (utf8BuilderToText $ displayCallStack cs) <> " " <>
toLogStr src <> " " <>
toLogStr (showLevel level) <>
toLogStr (utf8BuilderToText msg) <> "\n"
where showLevel LevelDebug = "[DEBUG] "
showLevel LevelInfo = "[ INFO] "
showLevel LevelWarn = "[ WARN] "
showLevel LevelError = "[ERROR] "
showLevel (LevelOther t) = "[" <> t <> "] "