packages feed

instana-haskell-trace-sdk-0.1.0.0: test/agent-stub/Instana/SDK/AgentStub/Logging.hs

module Instana.SDK.AgentStub.Logging
  ( agentStubLogger
  , initLogging
  ) where


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)


agentStubLogger :: String
agentStubLogger = "AgentStub"


logLevel :: Priority
logLevel = INFO


initLogging :: IO ()
initLogging = do
  updateGlobalLogger agentStubLogger $ setLevel logLevel
  updateGlobalLogger rootLoggerName $ setLevel logLevel
  agentStubFileHandler <- fileHandler "agent-stub.log" logLevel
  agentStubStreamHandler <- streamHandler stdout logLevel
  let
    formattedAgentStubFileHandler = withFormatter agentStubFileHandler
    formattedAgentStubStreamHandler = withFormatter agentStubStreamHandler
  updateGlobalLogger agentStubLogger $
    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 $loggername $pid $prio> $msg"