packages feed

instana-haskell-trace-sdk-0.2.0.0: test/integration/Instana/SDK/IntegrationTest/Logging.hs

module Instana.SDK.IntegrationTest.Logging
  ( testLogger
  , initLogging
  ) where


import           System.Environment        (lookupEnv)
import           System.IO                 (Handle, stdout)
import           System.Log.Formatter
import           System.Log.Handler        (setFormatter)
import           System.Log.Handler.Simple (GenericHandler, fileHandler,
                                            streamHandler)
import           System.Log.Logger         (Priority (..), rootLoggerName,
                                            setHandlers, setLevel,
                                            updateGlobalLogger)


testLogger :: String
testLogger = "IntegrationTest"


initLogging :: IO ()
initLogging = do
  logLevelEnvVar <- lookupEnv "LOG_LEVEL"
  let
    logLevel =
      case logLevelEnvVar of
        Just "DEBUG" -> DEBUG
        _            -> INFO
  updateGlobalLogger testLogger $ setLevel logLevel
  updateGlobalLogger rootLoggerName $ setLevel logLevel
  testFileHandler <- fileHandler "integration-test.log" logLevel
  testStreamHandler <- streamHandler stdout logLevel
  let
    formattedAgentStubFileHandler = withFormatter testFileHandler
    formattedAgentStubStreamHandler = withFormatter testStreamHandler
  updateGlobalLogger testLogger $
    setHandlers [ formattedAgentStubFileHandler ]
  updateGlobalLogger rootLoggerName $
    setHandlers [ formattedAgentStubStreamHandler ]


withFormatter :: GenericHandler Handle -> GenericHandler Handle
withFormatter handler = setFormatter handler formatter
    where
      timeFormat = "%F %H:%M:%S.%4q %z"
      formatter = tfLogFormatter timeFormat "$time $msg"