{-# LANGUAGE CPP #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TemplateHaskell #-} import Criterion.Main import Data.Aeson #if MIN_VERSION_aeson(1, 4, 3) import Data.Aeson.QQ.Simple (aesonQQ) #else import Data.Aeson.QQ (aesonQQ) #endif import Data.ByteString (pack) import Data.ByteString.Lazy (unpack) import Data.Maybe import System.IO.Unsafe import Logging.Config.Json import Logging.Global import Logging.Manager main :: IO () main = run manager $ defaultMain $ [ bgroup "stderr" [ bench "simple" $ nfIO $ $(debug) "Stderr.Simple" msg100 , bench "normal" $ nfIO $ $(info) "Stderr.Normal" msg100 , bench "full" $ nfIO $ $(fatal) "Stderr.Full" msg100 ] , bgroup "file" [ bench "simple" $ nfIO $ $(debug) "File.Simple" msg100 , bench "normal" $ nfIO $ $(info) "File.Normal" msg100 , bench "full" $ nfIO $ $(fatal) "File.Full" msg100 ] ] msg100 :: String msg100 = replicate 100 'W' manager :: Manager {-# NOINLINE manager #-} manager = unsafePerformIO $ getManager $ pack $ unpack $ encode $ [aesonQQ|{ "disabled": false, "catchUncaughtException": true, "sinks": { "Stderr.Simple": { "handlers": ["stderr.simple"], "propagate": false }, "Stderr.Normal": { "handlers": ["stderr.normal"], "propagate": false }, "Stderr.Full": { "handlers": ["stderr.full"], "propagate": false }, "File.Simple": { "handlers": ["file.simple"], "propagate": false }, "File.Normal": { "handlers": ["file.normal"], "propagate": false }, "File.Full": { "handlers": ["file.full"], "propagate": false } }, "handlers": { "stderr.simple": { "type": "StreamHandler", "stream": "stderr", "level": "DEBUG", "formatter": "simple" }, "stderr.normal": { "type": "StreamHandler", "stream": "stderr", "level": "INFO", "formatter": "normal" }, "stderr.full": { "type": "StreamHandler", "stream": "stderr", "level": "ERROR", "formatter": "full" }, "file.simple": { "type": "FileHandler", "level": "DEBUG", "formatter": "simple", "file": "/tmp/log4hs/benchmark.simple.log" }, "file.normal": { "type": "FileHandler", "level": "INFO", "formatter": "normal", "file": "/tmp/log4hs/benchmark.normal.log" }, "file.full": { "type": "FileHandler", "level": "ERROR", "formatter": "full", "file": "/tmp/log4hs/benchmark.full.log" } }, "formatters": { "simple": "{message}", "normal": "{asctime:%Y-%m-%dT%H:%M:%S%6Q%z} - {level} - {logger}] {message}", "full": "{asctime:%Y-%m-%dT%H:%M:%S%6Q%z} - {level} - {logger} - {pathname}:{lineno}] {message}" } }|]