{-# OPTIONS_GHC -fno-warn-orphans #-}
{-# LANGUAGE OverloadedStrings, UnicodeSyntax, FlexibleContexts, FlexibleInstances, UndecidableInstances #-}
module Magicbane.Logging (
module Magicbane.Logging
, module X
) where
import RIO
import Data.Has
import System.Log.FastLogger
import System.Log.FastLogger as X (LogType(..), defaultBufSize)
type ModLogger = LogFunc
instance Has ModLogger α ⇒ HasLogFunc α where
logFuncL = hasLens
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 <> "] "