{-# LANGUAGE OverloadedStrings #-} -- | Module provides syslog logger for simple-log -- -- >yourFunction :: MonadLog m => m () -- >yourFunction = scope "your" $ log Trace "Hello" -- > -- >run :: IO () -- >run = do -- > l <- newLog (fileCfg "log.cfg" 60) [syslog "name"] -- > withLog l yourFunction -- module System.Log.Syslog ( SyslogMessage(..), syslogMsg, toSyslog, toSyslog_, syslog, syslog_, Option(..), Facility(..) ) where import System.Posix.Syslog (Option(..), Facility(..)) import qualified System.Posix.Syslog as Syslog import qualified Data.Text as T import System.Log.Base data SyslogMessage = SyslogMessage { syslogPriority :: Syslog.Priority, syslogMessage :: String } deriving (Eq, Show) syslogMsg :: Converter SyslogMessage syslogMsg (Message _ lvl path msg) = SyslogMessage (priority lvl) $ T.unpack $ T.concat [T.intercalate "/" path, "> ", msg] where priority Trace = Syslog.Debug priority Debug = Syslog.Debug priority Info = Syslog.Info priority Warning = Syslog.Warning priority Error = Syslog.Error priority Fatal = Syslog.Critical toSyslog :: String -> [Option] -> Facility -> Consumer SyslogMessage toSyslog name ops facility = Consumer withSys where withSys f = Syslog.withSyslog name ops facility $ f $ \(SyslogMessage p str) -> Syslog.syslog p str toSyslog_ :: String -> Consumer SyslogMessage toSyslog_ name = Consumer withSys where withSys f = Syslog.useSyslog name $ f $ \(SyslogMessage p str) -> Syslog.syslog p str syslog :: String -> [Option] -> Facility -> Logger syslog name ops facility = logger syslogMsg (toSyslog name ops facility) syslog_ :: String -> Logger syslog_ name = logger syslogMsg (toSyslog_ name)