module Log.Backend.StandardOutput
( withSimpleStdOutLogger
, withStdOutLogger
, withJsonStdOutLogger
) where
import Control.Monad.IO.Unlift
import Data.Aeson
import System.IO
import qualified Data.Text.IO as T
import qualified Data.ByteString.Lazy.Char8 as BSL
import Log.Data
import Log.Internal.Logger
import Log.Logger
withSimpleStdOutLogger :: MonadUnliftIO m => (Logger -> m r) -> m r
withSimpleStdOutLogger :: forall (m :: * -> *) r. MonadUnliftIO m => (Logger -> m r) -> m r
withSimpleStdOutLogger = (Logger -> m r) -> m r
forall (m :: * -> *) r. MonadUnliftIO m => (Logger -> m r) -> m r
withStdOutLogger
{-# DEPRECATED withSimpleStdOutLogger "Use withStdOutLogger instead" #-}
withStdOutLogger :: MonadUnliftIO m => (Logger -> m r) -> m r
withStdOutLogger :: forall (m :: * -> *) r. MonadUnliftIO m => (Logger -> m r) -> m r
withStdOutLogger Logger -> m r
act = ((forall a. m a -> IO a) -> IO r) -> m r
forall b. ((forall a. m a -> IO a) -> IO b) -> m b
forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO (((forall a. m a -> IO a) -> IO r) -> m r)
-> ((forall a. m a -> IO a) -> IO r) -> m r
forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
unlift -> do
Logger
logger <- Text -> (LogMessage -> IO ()) -> IO Logger
mkLogger Text
"stdout" ((LogMessage -> IO ()) -> IO Logger)
-> (LogMessage -> IO ()) -> IO Logger
forall a b. (a -> b) -> a -> b
$ \LogMessage
msg -> do
Text -> IO ()
T.putStrLn (Text -> IO ()) -> Text -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe UTCTime -> LogMessage -> Text
showLogMessage Maybe UTCTime
forall a. Maybe a
Nothing LogMessage
msg
Handle -> IO ()
hFlush Handle
stdout
Logger -> (Logger -> IO r) -> IO r
forall r. Logger -> (Logger -> IO r) -> IO r
withLogger Logger
logger (m r -> IO r
forall a. m a -> IO a
unlift (m r -> IO r) -> (Logger -> m r) -> Logger -> IO r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Logger -> m r
act)
withJsonStdOutLogger :: MonadUnliftIO m => (Logger -> m r) -> m r
withJsonStdOutLogger :: forall (m :: * -> *) r. MonadUnliftIO m => (Logger -> m r) -> m r
withJsonStdOutLogger Logger -> m r
act = ((forall a. m a -> IO a) -> IO r) -> m r
forall b. ((forall a. m a -> IO a) -> IO b) -> m b
forall (m :: * -> *) b.
MonadUnliftIO m =>
((forall a. m a -> IO a) -> IO b) -> m b
withRunInIO (((forall a. m a -> IO a) -> IO r) -> m r)
-> ((forall a. m a -> IO a) -> IO r) -> m r
forall a b. (a -> b) -> a -> b
$ \forall a. m a -> IO a
unlift -> do
Logger
logger <- Text -> (LogMessage -> IO ()) -> IO Logger
mkLogger Text
"stdout-json" ((LogMessage -> IO ()) -> IO Logger)
-> (LogMessage -> IO ()) -> IO Logger
forall a b. (a -> b) -> a -> b
$ \LogMessage
msg -> do
ByteString -> IO ()
BSL.putStrLn (ByteString -> IO ()) -> ByteString -> IO ()
forall a b. (a -> b) -> a -> b
$ LogMessage -> ByteString
forall a. ToJSON a => a -> ByteString
encode LogMessage
msg
Handle -> IO ()
hFlush Handle
stdout
Logger -> (Logger -> IO r) -> IO r
forall r. Logger -> (Logger -> IO r) -> IO r
withLogger Logger
logger (m r -> IO r
forall a. m a -> IO a
unlift (m r -> IO r) -> (Logger -> m r) -> Logger -> IO r
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Logger -> m r
act)