diff --git a/src/System/Logger.hs b/src/System/Logger.hs index 91df5afe6f1cd1e7ef5947212ab5b2458c426f40..60459d513180a499f1e39f0185f760850f0169a6 100644 --- a/src/System/Logger.hs +++ b/src/System/Logger.hs @@ -84,9 +84,9 @@ new s = liftIO $ do e <- fmap (readNote "Invalid LOG_NETSTR") <$> lookupEnv "LOG_NETSTR" g <- fn (output s) (fromMaybe (bufSize s) n) c <- clockCache (format s) - let s' = s { logLevel = fromMaybe (logLevel s) l - , netstrings = fromMaybe (netstrings s) e - } + let s' = setLogLevel (fromMaybe (logLevel s) l) + . setNetStrings (fromMaybe (netstrings s) e) + $ s return $ Logger g s' (fst <$> c) (snd <$> c) where fn StdOut = FL.newStdoutLoggerSet @@ -101,7 +101,7 @@ new s = liftIO $ do -- | Invokes 'new' with default settings and the given output as log sink. create :: MonadIO m => Output -> m Logger -create p = new defSettings { output = p } +create o = new $ setOutput o defSettings readNote :: Read a => String -> String -> a readNote m s = case reads s of @@ -132,7 +132,7 @@ fatal g = log g Fatal -- | Clone the given logger and optionally give it a name -- (use @(Just \"\")@ to clear). clone :: Maybe Text -> Logger -> Logger -clone (Just n) g = g { settings = setName n (settings g) } +clone (Just n) g = g { settings = setName n (settings g) } clone Nothing g = g -- | Force buffered bytes to output sink. diff --git a/src/System/Logger/Settings.hs b/src/System/Logger/Settings.hs index f9890d13c4a69c8cb664376370a6445ec3f4040f..988927a50c62b1394a0b667c750eb48ddfc0aff8 100644 --- a/src/System/Logger/Settings.hs +++ b/src/System/Logger/Settings.hs @@ -4,7 +4,30 @@ {-# LANGUAGE OverloadedStrings #-} -module System.Logger.Settings where +module System.Logger.Settings + ( Settings + , Level (..) + , Output (..) + , DateFormat (..) + + , defSettings + , output + , setOutput + , format + , setFormat + , bufSize + , setBufSize + , delimiter + , setDelimiter + , netstrings + , setNetStrings + , logLevel + , setLogLevel + , name + , setName + , nameMsg + , iso8601UTC + ) where import Data.String import Data.ByteString (ByteString) @@ -14,37 +37,61 @@ import System.Log.FastLogger (defaultBufSize) import System.Logger.Message data Settings = Settings - { logLevel :: !Level -- ^ messages below this log level will be suppressed - , output :: !Output -- ^ log sink - , format :: !DateFormat -- ^ the timestamp format (use \"\" to disable timestamps) - , delimiter :: !ByteString -- ^ text to intersperse between fields of a log line - , netstrings :: !Bool -- ^ use encoding (fixes delimiter to \",\") - , bufSize :: !Int -- ^ how many bytes to buffer before commiting to sink - , name :: !Text -- ^ logger name - , nameMsg :: Msg -> Msg + { _logLevel :: !Level -- ^ messages below this log level will be suppressed + , _output :: !Output -- ^ log sink + , _format :: !DateFormat -- ^ the timestamp format (use \"\" to disable timestamps) + , _delimiter :: !ByteString -- ^ text to intersperse between fields of a log line + , _netstrings :: !Bool -- ^ use encoding (fixes delimiter to \",\") + , _bufSize :: !Int -- ^ how many bytes to buffer before commiting to sink + , _name :: !Text -- ^ logger name + , _nameMsg :: Msg -> Msg } +output :: Settings -> Output +output = _output + setOutput :: Output -> Settings -> Settings -setOutput x s = s { output = x } +setOutput x s = s { _output = x } + +format :: Settings -> DateFormat +format = _format setFormat :: DateFormat -> Settings -> Settings -setFormat x s = s { format = x } +setFormat x s = s { _format = x } + +bufSize :: Settings -> Int +bufSize = _bufSize setBufSize :: Int -> Settings -> Settings -setBufSize x s = s { bufSize = max 1 x } +setBufSize x s = s { _bufSize = max 1 x } + +delimiter :: Settings -> ByteString +delimiter = _delimiter setDelimiter :: ByteString -> Settings -> Settings -setDelimiter x s = s { delimiter = x } +setDelimiter x s = s { _delimiter = x } + +netstrings :: Settings -> Bool +netstrings = _netstrings setNetStrings :: Bool -> Settings -> Settings -setNetStrings x s = s { netstrings = x } +setNetStrings x s = s { _netstrings = x } + +logLevel :: Settings -> Level +logLevel = _logLevel setLogLevel :: Level -> Settings -> Settings -setLogLevel x s = s { logLevel = x } +setLogLevel x s = s { _logLevel = x } + +name :: Settings -> Text +name = _name setName :: Text -> Settings -> Settings -setName "" s = s { name = "", nameMsg = id } -setName xs s = s { name = xs, nameMsg = "logger" .= xs } +setName "" s = s { _name = "", _nameMsg = id } +setName xs s = s { _name = xs, _nameMsg = "logger" .= xs } + +nameMsg :: Settings -> (Msg -> Msg) +nameMsg = _nameMsg data Level = Trace