Commit e5e8ee94 authored by Toralf Wittner's avatar Toralf Wittner
Browse files

Hide record selectors in `Settings`.

parent 625cc688
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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
+64 −17
Original line number Diff line number Diff line
@@ -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 <http://cr.yp.to/proto/netstrings.txt netstrings> 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 <http://cr.yp.to/proto/netstrings.txt netstrings> 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