packages feed

logging-effect-syslog-0.1.0.0: src/Control/Monad/Log/Syslog.hs

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