micrologger-0.3.0.0: test/LogSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module LogSpec where
import Control.Monad (forM_)
import Data.Aeson (Value(..), toJSON)
import Data.Monoid
import qualified Data.IORef as IORef
import qualified Data.Text.Lazy as T
import Test.Hspec
import LuminescentDreams.Logger
writeBuffer :: IORef.IORef [T.Text] -> T.Text -> IO ()
writeBuffer buffer text = IORef.modifyIORef' buffer (\lst -> lst <> [text])
basicLogger :: Spec
basicLogger = describe "demonstrate IO output" $ do
it "outputs in the standard format" $ do
logRef <- IORef.newIORef []
let l = Logger (writeBuffer logRef) LogDebug
logMsgStd l LogInfo [("name", "value")] "message"
logMsgStd l LogInfo [("name", "value")] "message2"
IORef.readIORef logRef >>= flip forM_ (putStrLn . T.unpack)
jsonLogger :: Spec
jsonLogger = describe "demonstrate the JSON logger with IO output" $ do
it "outputs in the JSON format" $ do
logRef <- IORef.newIORef []
let l = Logger (writeBuffer logRef) LogDebug
logMsgJs l LogInfo [("name", String "value"), ("timing", toJSON (0.5 :: Float)), ("msg", String "message")]
logMsgJs l LogInfo [("name", String "value"), ("timing", toJSON (0.5 :: Float)), ("msg", String "message2")]
IORef.readIORef logRef >>= flip forM_ (putStrLn . T.unpack)
spec :: Spec
spec = do
basicLogger
jsonLogger