{-# LANGUAGE OverloadedStrings #-} module HaskellWorks.CabalCache.AWS.Env ( awsLogger ) where import Antiope.Env (LogLevel (..)) import Control.Concurrent (myThreadId) import Control.Monad import HaskellWorks.CabalCache.Show import qualified Data.ByteString.Lazy as LBS import qualified Data.ByteString.Lazy.Char8 as LC8 import qualified Data.Text.Encoding as T import qualified HaskellWorks.CabalCache.IO.Console as CIO import qualified System.IO as IO awsLogger :: Maybe LogLevel -> LogLevel -> LC8.ByteString -> IO () awsLogger :: Maybe LogLevel -> LogLevel -> ByteString -> IO () awsLogger Maybe LogLevel maybeConfigLogLevel LogLevel msgLogLevel ByteString message = Maybe LogLevel -> (LogLevel -> IO ()) -> IO () forall (t :: * -> *) (m :: * -> *) a b. (Foldable t, Monad m) => t a -> (a -> m b) -> m () forM_ Maybe LogLevel maybeConfigLogLevel ((LogLevel -> IO ()) -> IO ()) -> (LogLevel -> IO ()) -> IO () forall a b. (a -> b) -> a -> b $ \LogLevel configLogLevel -> Bool -> IO () -> IO () forall (f :: * -> *). Applicative f => Bool -> f () -> f () when (LogLevel msgLogLevel LogLevel -> LogLevel -> Bool forall a. Ord a => a -> a -> Bool <= LogLevel configLogLevel) (IO () -> IO ()) -> IO () -> IO () forall a b. (a -> b) -> a -> b $ do ThreadId threadId <- IO ThreadId myThreadId Handle -> Text -> IO () forall (m :: * -> *). MonadIO m => Handle -> Text -> m () CIO.hPutStrLn Handle IO.stderr (Text -> IO ()) -> Text -> IO () forall a b. (a -> b) -> a -> b $ Text "[" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> LogLevel -> Text forall a. Show a => a -> Text tshow LogLevel msgLogLevel Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "] [tid: " Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> ThreadId -> Text forall a. Show a => a -> Text tshow ThreadId threadId Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text "]" Text -> Text -> Text forall a. Semigroup a => a -> a -> a <> Text text where text :: Text text = ByteString -> Text T.decodeUtf8 (ByteString -> Text) -> ByteString -> Text forall a b. (a -> b) -> a -> b $ ByteString -> ByteString LBS.toStrict ByteString message