Skip to content

Commit 87ab5af

Browse files
committed
add the files downloaded from the monad-logger-syslog hackage tarball
1 parent 356d6ab commit 87ab5af

File tree

4 files changed

+94
-0
lines changed

4 files changed

+94
-0
lines changed

Setup.hs

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import Distribution.Simple
2+
main = defaultMain

System/Log/MonadLogger/Syslog.hs

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{-# LANGUAGE OverloadedStrings #-}
2+
module System.Log.MonadLogger.Syslog where
3+
4+
import Control.Monad.IO.Class (MonadIO ())
5+
import Control.Monad.Logger
6+
import System.Posix.Syslog
7+
import Data.Text (unpack)
8+
import System.Log.FastLogger (LogStr, fromLogStr)
9+
import qualified Data.ByteString.Char8 as BS8
10+
11+
runSyslogLoggingT :: MonadIO m => LoggingT m a -> m a
12+
runSyslogLoggingT = (`runLoggingT` syslogOutput)
13+
14+
-- TODO: useSyslog allows giving a source name and should be more efficient
15+
-- But it assumes IO
16+
-- Perhaps should use mmorph to generalize IO to MonadIO
17+
{-
18+
runSyslogLoggingT :: MonadIO m => String -> LoggingT m a -> m a
19+
runSyslogLoggingT source action =
20+
useSyslog source (runLoggingT action syslogOutput)
21+
-}
22+
23+
24+
syslogOutput :: Loc
25+
-> LogSource
26+
-> LogLevel
27+
-> LogStr
28+
-> IO ()
29+
syslogOutput l s level msg =
30+
syslog (levelToPriority level) $
31+
BS8.unpack $ fromLogStr $
32+
defaultLogStr l s level msg
33+
34+
35+
levelToPriority :: LogLevel -> Priority
36+
levelToPriority LevelDebug = Debug
37+
levelToPriority LevelInfo = Info
38+
levelToPriority LevelWarn = Warning
39+
levelToPriority LevelError = Error
40+
levelToPriority (LevelOther level) =
41+
case level of
42+
"Emergency" -> Emergency
43+
"Alert" -> Alert
44+
"Critical" -> Critical
45+
"Notice" -> Notice
46+
_ -> error $ "unknown log level: " ++ unpack level

monad-logger-syslog.cabal

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: monad-logger-syslog
2+
version: 0.1.0.0
3+
synopsis: rsyslog output for monad-logger
4+
description: rsyslog output for monad-logger
5+
homepage: https://github.com/docmunch/monad-logger-rsyslog
6+
license: MIT
7+
license-file: LICENSE
8+
author: Greg Weber
9+
maintainer: [email protected]
10+
category: System
11+
build-type: Simple
12+
extra-source-files: README.md
13+
cabal-version: >=1.10
14+
15+
library
16+
default-language: Haskell2010
17+
exposed-modules: System.Log.MonadLogger.Syslog
18+
ghc-options: -Wall
19+
build-depends: base >=4.6 && <4.7
20+
, monad-logger >= 0.3.4.0
21+
, fast-logger >= 2.1.0
22+
, hsyslog
23+
, transformers
24+
, text
25+
, bytestring
26+
27+
test-suite smoke
28+
default-language: Haskell2010
29+
30+
type: exitcode-stdio-1.0
31+
hs-source-dirs: test
32+
main-is: smoke.hs
33+
34+
build-depends: base, monad-logger, monad-logger-syslog, shelly

test/smoke.hs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{-# LANGUAGE OverloadedStrings #-}
2+
import Control.Monad.Logger
3+
import System.Log.MonadLogger.Syslog
4+
import Shelly
5+
6+
main :: IO ()
7+
main = do
8+
let logFile = "/var/log/syslog"
9+
runSyslogLoggingT $ logDebugN "HELLO!"
10+
shellyNoDir $
11+
whenM (test_e logFile) $
12+
cmd "tail" logFile

0 commit comments

Comments
 (0)