-- This Source Code Form is subject to the terms of the Mozilla Public
-- License, v. 2.0. If a copy of the MPL was not distributed with this
-- file, You can obtain one at http://mozilla.org/MPL/2.0/.

{-# LANGUAGE FlexibleContexts #-}

-- | The 'MonadLogger' type-class and associated functions.
module System.Logger.Class
    ( L.Settings
    , L.Renderer
    , L.defSettings
    , L.logLevel
    , L.setLogLevel
    , L.output
    , L.setOutput
    , L.format
    , L.setFormat
    , L.delimiter
    , L.setDelimiter
    , L.setNetStrings
    , L.bufSize
    , L.setBufSize
    , L.name
    , L.setName
    , L.setRenderer
    , L.renderer

    , L.Level    (..)
    , L.Output   (..)

    , L.DateFormat
    , L.iso8601UTC

    , L.Logger
    , L.new
    , L.create
    , L.level
    , L.flush
    , L.close
    , L.clone
    , L.settings

    , MonadLogger (..)
    , trace
    , debug
    , info
    , warn
    , err
    , fatal

    , module M
    ) where

import System.Logger (Level (..))
import System.Logger.Message as M

import qualified System.Logger as L

class Monad m => MonadLogger m where
    log :: Level -> (Msg -> Msg) -> m ()

-- | Abbreviation for 'log' using the corresponding log level.
trace, debug, info, warn, err, fatal :: MonadLogger m => (Msg -> Msg) -> m ()
trace :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
trace = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Trace
debug :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
debug = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Debug
info :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
info  = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Info
warn :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
warn  = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Warn
err :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
err   = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Error
fatal :: forall (m :: * -> *). MonadLogger m => (Msg -> Msg) -> m ()
fatal = Level -> (Msg -> Msg) -> m ()
forall (m :: * -> *).
MonadLogger m =>
Level -> (Msg -> Msg) -> m ()
System.Logger.Class.log Level
Fatal