packages feed

log4hs-0.9.0.0: bench/Main.hs

{-# 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}"
    }
  }|]