-- | This module provides functions to integrate @amazonka@ logging with
-- @heavy-logging@ package.
module System.Log.Heavy.AWS
(awsLogLevelToLevel,
toAwsLogger,
getAwsLogger
) where
import Data.Binary.Builder
import qualified Data.Text.Lazy.Encoding as TLE
import Language.Haskell.TH.Syntax (Loc (..))
import System.Log.Heavy as H
import Network.AWS.Types as AWS
-- | Translate Amazonka's LogLevel to heavy-logger's Level.
awsLogLevelToLevel :: LogLevel -> Level
awsLogLevelToLevel Info = info_level
awsLogLevelToLevel Error = error_level
awsLogLevelToLevel Debug = debug_level
awsLogLevelToLevel Trace = trace_level
-- | Obtain Amazonka's Logger in a monad that has heavy-logger's Logger.
getAwsLogger :: (Monad m, HasLogger m) => m AWS.Logger
getAwsLogger = do
logger <- getLogger
return $ toAwsLogger logger
-- | Convert heavy-logger's SpecializedLogger to Amaoznka's Logger.
toAwsLogger :: H.SpecializedLogger -> AWS.Logger
toAwsLogger logger =
\lvl builder -> logger (mkMessage lvl builder)
where
mkMessage lvl builder =
LogMessage {
lmLevel = awsLogLevelToLevel lvl,
lmSource = ["Amazon"],
lmLocation = Loc "Unknown" "unknown" "Unknown" (0,0) (0,0),
lmFormatString = TLE.decodeUtf8 $ toLazyByteString builder,
lmFormatVars = (),
lmContext = []
}