module RFC.Log
( module Control.Logger.Simple
, withLogging
) where
import Control.Logger.Simple (logDebug, logError, logInfo, logWarn,
pureDebug, pureError, pureInfo,
pureWarn)
import Control.Logger.Simple as Log
import RFC.Env as Env
import RFC.Prelude
import System.IO (BufferMode (..), stderr)
withLogging :: (MonadFail m, MonadUnliftIO m) => m a -> m a
withLogging action = do
appSlug <- Env.readAppSlug
hSetBuffering stderr LineBuffering
ioAction <- toIO action
liftIO $ Log.withGlobalLogging (logConfig appSlug) ioAction
where
logConfig appSlug =
if Env.isDevelopment then
Log.LogConfig { Log.lc_file = Nothing, Log.lc_stderr = True }
else
Log.LogConfig { Log.lc_file = Just ("./log/" ++ appSlug ++ ".log"), Log.lc_stderr = False }