module Control.Monad.Log.Syslog where import Control.Monad.IO.Class import Control.Monad.Log import Data.ByteString.Char8 as C8 import Data.ByteString.Unsafe (unsafeUseAsCStringLen) import System.IO import Data.String import qualified System.Posix.Syslog as Posix -- | Log messages to a posix system log. The string argument is a tag that can -- be used to identify log messages produced by this logger. -- You can, for instance, run @journalctl --user -t mytag@ to see log messages -- tagged with @"mytag"@. logToSyslog :: (MonadIO m) => String -> Handler m (WithSeverity ByteString) logToSyslog tagstr = \(WithSeverity sev msg) -> liftIO $ Posix.withSyslog tagstr [Posix.DelayedOpen] Posix.User $ unsafeUseAsCStringLen msg $ Posix.syslog Nothing (syslogPriority sev) syslogPriority :: Severity -> Posix.Priority syslogPriority = \case Emergency -> Posix.Emergency Alert -> Posix.Alert Critical -> Posix.Critical Error -> Posix.Error Warning -> Posix.Warning Notice -> Posix.Notice Informational -> Posix.Info Debug-> Posix.Debug