{-# LANGUAGE OverloadedStrings #-} -- Module : Network.AWS.Internal.Log -- Copyright : (c) 2013-2015 Brendan Hay -- License : This Source Code Form is subject to the terms of -- the Mozilla Public License, v. 2.0. -- A copy of the MPL can be found in the LICENSE file or -- you can obtain it at http://mozilla.org/MPL/2.0/. -- Maintainer : Brendan Hay -- Stability : experimental -- Portability : non-portable (GHC extensions) -- | Types and functions for optional logging machinery used during the -- request, response, and signing life-cycles. module Network.AWS.Internal.Log where import Control.Monad import Control.Monad.IO.Class import Data.ByteString.Builder import Data.Monoid import Network.AWS.Data import Network.AWS.Types import System.IO -- | This is a primitive logger which can be used to log messages to a 'Handle'. -- A more sophisticated logging library such as tinylog or FastLogger should be -- used in production code. newLogger :: MonadIO m => LogLevel -> Handle -> m Logger newLogger x hd = liftIO $ do hSetBinaryMode hd True hSetBuffering hd LineBuffering return $ \y b -> when (x >= y) $ hPutBuilder hd (b <> "\n") info :: (MonadIO m, ToBuilder a) => Logger -> a -> m () info f = liftIO . f Info . build {-# INLINE info #-} debug :: (MonadIO m, ToBuilder a) => Logger -> a -> m () debug f = liftIO . f Debug . build {-# INLINE debug #-} trace :: (MonadIO m, ToBuilder a) => Logger -> a -> m () trace f = liftIO . f Trace . build {-# INLINE trace #-}