effects-logger
Safe HaskellNone
LanguageGHC2021

Effects.Logger

Description

Provides logging effect and utilities..

Since: 0.1

Synopsis

Effect

class Monad m => MonadLogger (m :: Type -> Type) where Source #

A Monad which has the ability to log messages in some manner.

Minimal complete definition

Nothing

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> m () Source #

default monadLoggerLog :: forall (m' :: Type -> Type) (t :: (Type -> Type) -> Type -> Type) msg. (MonadLogger m', MonadTrans t, MonadLogger (t m'), ToLogStr msg, m ~ t m') => Loc -> LogSource -> LogLevel -> msg -> m () Source #

Instances

Instances details
MonadIO m => MonadLogger (LoggingT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> LoggingT m () Source #

Monad m => MonadLogger (NoLoggingT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> NoLoggingT m () Source #

Monad m => MonadLogger (WriterLoggingT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> WriterLoggingT m () Source #

MonadLogger m => MonadLogger (ResourceT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> ResourceT m () Source #

MonadLogger m => MonadLogger (MaybeT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> MaybeT m () Source #

MonadLogger m => MonadLogger (ExceptT e m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> ExceptT e m () Source #

MonadLogger m => MonadLogger (IdentityT m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> IdentityT m () Source #

MonadLogger m => MonadLogger (ReaderT r m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> ReaderT r m () Source #

MonadLogger m => MonadLogger (StateT s m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> StateT s m () Source #

MonadLogger m => MonadLogger (StateT s m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> StateT s m () Source #

(MonadLogger m, Monoid w) => MonadLogger (WriterT w m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> WriterT w m () Source #

(MonadLogger m, Monoid w) => MonadLogger (WriterT w m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> WriterT w m () Source #

MonadLogger m => MonadLogger (ConduitM i o m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> ConduitM i o m () Source #

MonadLogger m => MonadLogger (ContT r m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> ContT r m () Source #

(MonadLogger m, Monoid w) => MonadLogger (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> RWST r w s m () Source #

(MonadLogger m, Monoid w) => MonadLogger (RWST r w s m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> RWST r w s m () Source #

MonadLogger m => MonadLogger (Pipe l i o u m) Source # 
Instance details

Defined in Control.Monad.Logger

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> Pipe l i o u m () Source #

Levels

data LogLevel Source #

Instances

Instances details
Read LogLevel Source # 
Instance details

Defined in Control.Monad.Logger

Show LogLevel Source # 
Instance details

Defined in Control.Monad.Logger

Eq LogLevel Source # 
Instance details

Defined in Control.Monad.Logger

Ord LogLevel Source # 
Instance details

Defined in Control.Monad.Logger

Lift LogLevel Source # 
Instance details

Defined in Control.Monad.Logger

Methods

lift :: Quote m => LogLevel -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => LogLevel -> Code m LogLevel #

Logging functions

Levels

logTrace :: Q Exp Source #

Since: 0.1

logDebug :: Q Exp Source #

Generates a function that takes a Text and logs a LevelDebug message. Usage:

$(logDebug) "This is a debug log message"

logOther :: Text -> Q Exp Source #

Generates a function that takes a Text and logs a LevelOther message. Usage:

$(logOther "My new level") "This is a log message"

logFatal :: Q Exp Source #

Since: 0.1

Level checks

guardLevel Source #

Arguments

:: Applicative f 
=> LogLevel

The configured log level to check against.

-> LogLevel

The log level for this action.

-> f ()

The logging action to run if the level passes.

-> f () 

guardLevel configLvl lvl m runs m iff shouldLog configLvl lvl. This can be useful for writing a logging function e.g.

  -- logs msg to file iff configLogLevel <= lvl e.g.
  -- configLogLevel := LevelWarn
  -- lvl            := LevelError
  logMsg lvl msg = do
  configLogLevel <- getConfigLogLevel -- e.g. ReaderT Env
  guardLevel configLogLevel lvl $ do
    logToFile msg

Since: 0.1

shouldLog Source #

Arguments

:: LogLevel

The configured log level to check against.

-> LogLevel

Level for this log

-> Bool

Whether we should log

shouldLog configLvl lvl returns true iff configLvl <= lvl. Uses LogLevel's built-in ordering with special cases for Trace (LevelOther Trace) and Fatal (LevelOther Fatal). The ad-hoc ordering is thus:

  LevelOther "Trace"
    < LevelDebug
    < LevelInfo
    < LevelWarn
    < LevelError
    < LevelOther "Fatal"
    < LevelOther "<any>"

In other words, LogLevel's usual Ord is respected, with the additional cases. Note that any other LevelOther "custom" sit at the the highest level and compare via Text's Ord, just like LogLevel's usual Ord.

Since: 0.1

Formatting

data LogFormatter Source #

Formatter for logs.

Since: 0.1

Constructors

MkLogFormatter 

Fields

Instances

Instances details
Generic LogFormatter Source # 
Instance details

Defined in Effects.Logger.Utils

Associated Types

type Rep LogFormatter

Since: effects-logger-0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LogFormatter = D1 ('MetaData "LogFormatter" "Effects.Logger.Utils" "effects-logger-0.1-inplace" 'False) (C1 ('MetaCons "MkLogFormatter" 'PrefixI 'True) ((S1 ('MetaSel ('Just "locStrategy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 LocStrategy) :*: S1 ('MetaSel ('Just "newline") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool)) :*: (S1 ('MetaSel ('Just "threadLabel") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool) :*: S1 ('MetaSel ('Just "timezone") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool))))
Show LogFormatter Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

Eq LogFormatter Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

(k ~ A_Lens, a ~ LocStrategy, b ~ LocStrategy) => LabelOptic "locStrategy" k LogFormatter LogFormatter a b Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

(k ~ A_Lens, a ~ Bool, b ~ Bool) => LabelOptic "newline" k LogFormatter LogFormatter a b Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

(k ~ A_Lens, a ~ Bool, b ~ Bool) => LabelOptic "threadLabel" k LogFormatter LogFormatter a b Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

(k ~ A_Lens, a ~ Bool, b ~ Bool) => LabelOptic "timezone" k LogFormatter LogFormatter a b Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LogFormatter Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LogFormatter = D1 ('MetaData "LogFormatter" "Effects.Logger.Utils" "effects-logger-0.1-inplace" 'False) (C1 ('MetaCons "MkLogFormatter" 'PrefixI 'True) ((S1 ('MetaSel ('Just "locStrategy") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 LocStrategy) :*: S1 ('MetaSel ('Just "newline") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool)) :*: (S1 ('MetaSel ('Just "threadLabel") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool) :*: S1 ('MetaSel ('Just "timezone") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Bool))))

defaultLogFormatter :: Loc -> LogFormatter Source #

LogFormatter with:

locStrategy = LocPartial loc
newline = True
threadLabel = False
timezone = False

Since: 0.1

data LocStrategy Source #

Determines how we log location data.

Since: 0.1

Constructors

LocPartial !Loc

Logs the location with filename, line, col.

Since: 0.1

LocStable !Loc

Logs the location with filename.

Since: 0.1

LocNone

No location logging.

Since: 0.1

Instances

Instances details
Generic LocStrategy Source # 
Instance details

Defined in Effects.Logger.Utils

Associated Types

type Rep LocStrategy

Since: effects-logger-0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LocStrategy = D1 ('MetaData "LocStrategy" "Effects.Logger.Utils" "effects-logger-0.1-inplace" 'False) (C1 ('MetaCons "LocPartial" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Loc)) :+: (C1 ('MetaCons "LocStable" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Loc)) :+: C1 ('MetaCons "LocNone" 'PrefixI 'False) (U1 :: Type -> Type)))
Show LocStrategy Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

Eq LocStrategy Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LocStrategy Source #

Since: 0.1

Instance details

Defined in Effects.Logger.Utils

type Rep LocStrategy = D1 ('MetaData "LocStrategy" "Effects.Logger.Utils" "effects-logger-0.1-inplace" 'False) (C1 ('MetaCons "LocPartial" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Loc)) :+: (C1 ('MetaCons "LocStable" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Loc)) :+: C1 ('MetaCons "LocNone" 'PrefixI 'False) (U1 :: Type -> Type)))

formatLog Source #

Arguments

:: (HasCallStack, MonadThread m, MonadTime m, ToLogStr msg) 
=> LogFormatter

Formatter to use.

-> LogLevel

The level in which to log.

-> msg

Message.

-> m LogStr

Formatted LogStr.

Produces a formatted LogStr.

Example

-- [timestamp][thread_label][code_loc][level] msg
[2022-02-08 10:20:05][thread-label][filename:1:2][Warn] msg

Since: 0.1

Optics

LogLevels

Reexports

data LogStr Source #

Log message builder. Use (<>) to append two LogStr in O(1).

Instances

Instances details
ToLogStr LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

Monoid LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

Semigroup LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

IsString LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

Methods

fromString :: String -> LogStr #

Show LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

Eq LogStr Source # 
Instance details

Defined in System.Log.FastLogger.LogStr

Methods

(==) :: LogStr -> LogStr -> Bool #

(/=) :: LogStr -> LogStr -> Bool #

data Loc #

A location within a source file.

Instances

Instances details
Data Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Loc -> c Loc #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Loc #

toConstr :: Loc -> Constr #

dataTypeOf :: Loc -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Loc) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Loc) #

gmapT :: (forall b. Data b => b -> b) -> Loc -> Loc #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Loc -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Loc -> r #

gmapQ :: (forall d. Data d => d -> u) -> Loc -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Loc -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Loc -> m Loc #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Loc -> m Loc #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Loc -> m Loc #

Generic Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax

Associated Types

type Rep Loc 
Instance details

Defined in GHC.Internal.TH.Syntax

Methods

from :: Loc -> Rep Loc x #

to :: Rep Loc x -> Loc #

Show Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax

Methods

showsPrec :: Int -> Loc -> ShowS #

show :: Loc -> String #

showList :: [Loc] -> ShowS #

Eq Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax

Methods

(==) :: Loc -> Loc -> Bool #

(/=) :: Loc -> Loc -> Bool #

Ord Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax

Methods

compare :: Loc -> Loc -> Ordering #

(<) :: Loc -> Loc -> Bool #

(<=) :: Loc -> Loc -> Bool #

(>) :: Loc -> Loc -> Bool #

(>=) :: Loc -> Loc -> Bool #

max :: Loc -> Loc -> Loc #

min :: Loc -> Loc -> Loc #

Lift Loc #

Since: template-haskell-2.22.1.0

Instance details

Defined in GHC.Internal.TH.Lift

Methods

lift :: Quote m => Loc -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => Loc -> Code m Loc #

type Rep Loc # 
Instance details

Defined in GHC.Internal.TH.Syntax