-- | 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 = [] }