From bfb1fa35eff9204dd91c03b97034f585cd06cc02 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 29 Jul 2024 16:40:26 -0600 Subject: [PATCH 1/4] add ThreadContext module --- Blammo-wai/Blammo-wai.cabal | 2 +- Blammo-wai/CHANGELOG.md | 6 +++++- Blammo-wai/package.yaml | 2 +- Blammo-wai/src/Network/Wai/Middleware/Logging.hs | 1 + Blammo/Blammo.cabal | 3 ++- Blammo/CHANGELOG.md | 7 ++++++- Blammo/README.lhs | 1 + Blammo/package.yaml | 2 +- Blammo/src/Blammo/Logging.hs | 8 -------- Blammo/src/Blammo/Logging/ThreadContext.hs | 10 ++++++++++ Blammo/tests/Blammo/Logging/TerminalSpec.hs | 3 ++- 11 files changed, 30 insertions(+), 15 deletions(-) create mode 100644 Blammo/src/Blammo/Logging/ThreadContext.hs diff --git a/Blammo-wai/Blammo-wai.cabal b/Blammo-wai/Blammo-wai.cabal index dfc6330..fb2447c 100644 --- a/Blammo-wai/Blammo-wai.cabal +++ b/Blammo-wai/Blammo-wai.cabal @@ -5,7 +5,7 @@ cabal-version: 1.18 -- see: https://github.com/sol/hpack name: Blammo-wai -version: 0.0.0.1 +version: 0.0.0.2 synopsis: Using Blammo with WAI description: Please see README.md category: Logging, Web diff --git a/Blammo-wai/CHANGELOG.md b/Blammo-wai/CHANGELOG.md index 47a9576..8c3ea69 100644 --- a/Blammo-wai/CHANGELOG.md +++ b/Blammo-wai/CHANGELOG.md @@ -1,4 +1,8 @@ -## [_Unreleased_](https://github.com/freckle/blammo/compare/Blammo-wai-v0.0.0.1..main) +## [_Unreleased_](https://github.com/freckle/blammo/compare/Blammo-wai-v0.0.0.2..main) + +## [v0.0.0.2](https://github.com/freckle/blammo/compare/Blammo-wai-v0.0.0.1...Blammo-wai-v0.0.0.2) + +- Support `Blammo-2.1.0.0` ## [v0.0.0.1](https://github.com/freckle/blammo/compare/Blammo-wai-v0.0.0.0...Blammo-wai-v0.0.0.1) diff --git a/Blammo-wai/package.yaml b/Blammo-wai/package.yaml index 3a3601c..f1b0e18 100644 --- a/Blammo-wai/package.yaml +++ b/Blammo-wai/package.yaml @@ -1,5 +1,5 @@ name: Blammo-wai -version: 0.0.0.1 +version: 0.0.0.2 maintainer: Freckle Education category: Logging, Web github: freckle/blammo diff --git a/Blammo-wai/src/Network/Wai/Middleware/Logging.hs b/Blammo-wai/src/Network/Wai/Middleware/Logging.hs index 48f4297..34cf47e 100644 --- a/Blammo-wai/src/Network/Wai/Middleware/Logging.hs +++ b/Blammo-wai/src/Network/Wai/Middleware/Logging.hs @@ -15,6 +15,7 @@ module Network.Wai.Middleware.Logging import Prelude import Blammo.Logging +import Blammo.Logging.ThreadContext import Control.Applicative ((<|>)) import Control.Arrow ((***)) import Control.Monad.IO.Unlift (withRunInIO) diff --git a/Blammo/Blammo.cabal b/Blammo/Blammo.cabal index c2afb24..04749de 100644 --- a/Blammo/Blammo.cabal +++ b/Blammo/Blammo.cabal @@ -5,7 +5,7 @@ cabal-version: 1.18 -- see: https://github.com/sol/hpack name: Blammo -version: 2.0.0.0 +version: 2.1.0.0 synopsis: Batteries-included Structured Logging library description: Please see README.md category: Logging @@ -36,6 +36,7 @@ library Blammo.Logging.Terminal Blammo.Logging.Terminal.LogPiece Blammo.Logging.Test + Blammo.Logging.ThreadContext Blammo.Logging.WithLogger Data.Aeson.Compat System.Log.FastLogger.Compat diff --git a/Blammo/CHANGELOG.md b/Blammo/CHANGELOG.md index 9fa1c0b..a423a78 100644 --- a/Blammo/CHANGELOG.md +++ b/Blammo/CHANGELOG.md @@ -1,4 +1,9 @@ -## [_Unreleased_](https://github.com/freckle/blammo/compare/Blammo-v2.0.0.0...main) +## [_Unreleased_](https://github.com/freckle/blammo/compare/Blammo-v2.2.0.0...main) + +## [v2.1.0.0](https://github.com/freckle/blammo/compare/v2.0.0.0...Blammo-v2.1.0.0) + +- Moved `MonadMask`, `withThreadContext`, `myThreadContext`, `Pair` from + `Blammo.Logging` to `Blammo.Logging.ThreadContext`. ## [v2.0.0.0](https://github.com/freckle/blammo/compare/v1.2.1.0...Blammo-v2.0.0.0) diff --git a/Blammo/README.lhs b/Blammo/README.lhs index c0a7c8c..ac71708 100644 --- a/Blammo/README.lhs +++ b/Blammo/README.lhs @@ -44,6 +44,7 @@ import Control.Monad.Reader (MonadReader, ReaderT (runReaderT)) ```haskell import Blammo.Logging.Simple +import Blammo.Logging.ThreadContext ``` Throughout your application, you should write against the ubiquitous diff --git a/Blammo/package.yaml b/Blammo/package.yaml index 969789c..1494493 100644 --- a/Blammo/package.yaml +++ b/Blammo/package.yaml @@ -1,5 +1,5 @@ name: Blammo -version: 2.0.0.0 +version: 2.1.0.0 maintainer: Freckle Education category: Logging github: freckle/blammo diff --git a/Blammo/src/Blammo/Logging.hs b/Blammo/src/Blammo/Logging.hs index 37ff2d5..2fc6a94 100644 --- a/Blammo/src/Blammo/Logging.hs +++ b/Blammo/src/Blammo/Logging.hs @@ -24,12 +24,6 @@ module Blammo.Logging , (.=) , Series - -- ** Thread Context - , MonadMask - , withThreadContext - , myThreadContext - , Pair - -- ** Transformers , MonadLogger (..) , MonadLoggerIO (..) @@ -61,11 +55,9 @@ import Blammo.Logging.LogSettings import Blammo.Logging.Logger import Blammo.Logging.WithLogger import Control.Lens (view) -import Control.Monad.Catch (MonadMask) import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.Logger.Aeson import Data.Aeson (Series) -import Data.Aeson.Types (Pair) import UnliftIO.Exception (finally) -- | Initialize logging, pass a 'Logger' to the callback, and clean up at the end diff --git a/Blammo/src/Blammo/Logging/ThreadContext.hs b/Blammo/src/Blammo/Logging/ThreadContext.hs new file mode 100644 index 0000000..4c0ebf8 --- /dev/null +++ b/Blammo/src/Blammo/Logging/ThreadContext.hs @@ -0,0 +1,10 @@ +module Blammo.Logging.ThreadContext + ( MonadMask + , withThreadContext + , myThreadContext + , Pair + ) where + +import Control.Monad.Catch (MonadMask) +import Control.Monad.Logger.Aeson (myThreadContext, withThreadContext) +import Data.Aeson.Types (Pair) diff --git a/Blammo/tests/Blammo/Logging/TerminalSpec.hs b/Blammo/tests/Blammo/Logging/TerminalSpec.hs index 37805b7..c3b71f4 100644 --- a/Blammo/tests/Blammo/Logging/TerminalSpec.hs +++ b/Blammo/tests/Blammo/Logging/TerminalSpec.hs @@ -9,7 +9,8 @@ import Prelude import Blammo.Logging import Blammo.Logging.Logger (LoggedMessage (..)) import Blammo.Logging.Terminal -import Data.Aeson +import Data.Aeson (encode, object) +import Data.Aeson.Types (Object, Pair, Value (..)) import Data.ByteString (ByteString) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BS8 From 48d6ff194f146f477980d241e0fde8782b600590 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Mon, 29 Jul 2024 16:50:34 -0600 Subject: [PATCH 2/4] remove LogSettings re-exports --- Blammo/CHANGELOG.md | 12 ++++++++++-- Blammo/README.lhs | 1 + Blammo/src/Blammo/Logging.hs | 14 +------------- Blammo/tests/Blammo/Logging/LoggerSpec.hs | 1 + 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Blammo/CHANGELOG.md b/Blammo/CHANGELOG.md index a423a78..1420155 100644 --- a/Blammo/CHANGELOG.md +++ b/Blammo/CHANGELOG.md @@ -2,8 +2,16 @@ ## [v2.1.0.0](https://github.com/freckle/blammo/compare/v2.0.0.0...Blammo-v2.1.0.0) -- Moved `MonadMask`, `withThreadContext`, `myThreadContext`, `Pair` from - `Blammo.Logging` to `Blammo.Logging.ThreadContext`. +Removes less frequently used definitions from the main `Blammo.Logging` module +into other modules. + +- Moved from `Blammo.Logging` to new module `Blammo.Logging.ThreadContext`: + `MonadMask`, `withThreadContext`, `myThreadContext`, `Pair`. +- Removed from `Blammo.Logging` (still available in `Blammo.Logging.LogSettings`): + `LogSettings`, `LogDestination (..)`, `LogFormat (..)`, `defaultLogSettings`, + `LogColor (..)`, `setLogSettingsLevels`, `setLogSettingsDestination`, + `setLogSettingsFormat`, `setLogSettingsColor`, `setLogSettingsBreakpoint`, + `setLogSettingsConcurrency`. ## [v2.0.0.0](https://github.com/freckle/blammo/compare/v1.2.1.0...Blammo-v2.0.0.0) diff --git a/Blammo/README.lhs b/Blammo/README.lhs index ac71708..15c2d32 100644 --- a/Blammo/README.lhs +++ b/Blammo/README.lhs @@ -44,6 +44,7 @@ import Control.Monad.Reader (MonadReader, ReaderT (runReaderT)) ```haskell import Blammo.Logging.Simple +import Blammo.Logging.LogSettings import Blammo.Logging.ThreadContext ``` diff --git a/Blammo/src/Blammo/Logging.hs b/Blammo/src/Blammo/Logging.hs index 2fc6a94..a635e35 100644 --- a/Blammo/src/Blammo/Logging.hs +++ b/Blammo/src/Blammo/Logging.hs @@ -1,16 +1,5 @@ module Blammo.Logging - ( LogSettings - , LogLevel (..) - , LogDestination (..) - , LogFormat (..) - , LogColor (..) - , defaultLogSettings - , setLogSettingsLevels - , setLogSettingsDestination - , setLogSettingsFormat - , setLogSettingsColor - , setLogSettingsBreakpoint - , setLogSettingsConcurrency + ( LogLevel (..) , Logger , HasLogger (..) , withLogger @@ -51,7 +40,6 @@ module Blammo.Logging , logOtherNS ) where -import Blammo.Logging.LogSettings import Blammo.Logging.Logger import Blammo.Logging.WithLogger import Control.Lens (view) diff --git a/Blammo/tests/Blammo/Logging/LoggerSpec.hs b/Blammo/tests/Blammo/Logging/LoggerSpec.hs index e5385de..19e53e4 100644 --- a/Blammo/tests/Blammo/Logging/LoggerSpec.hs +++ b/Blammo/tests/Blammo/Logging/LoggerSpec.hs @@ -7,6 +7,7 @@ module Blammo.Logging.LoggerSpec import Prelude import Blammo.Logging +import Blammo.Logging.LogSettings import Blammo.Logging.Logger import Control.Monad.Reader (runReaderT) import Data.Aeson (Value (..)) From 640d8ad9a23e71f2f959d9611deabbe130874ec7 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 30 Jul 2024 17:53:40 -0600 Subject: [PATCH 3/4] reexport from Simple module --- Blammo/CHANGELOG.md | 5 +++++ Blammo/README.lhs | 2 -- Blammo/src/Blammo/Logging/Simple.hs | 4 ++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Blammo/CHANGELOG.md b/Blammo/CHANGELOG.md index 1420155..10b572c 100644 --- a/Blammo/CHANGELOG.md +++ b/Blammo/CHANGELOG.md @@ -13,6 +13,11 @@ into other modules. `setLogSettingsFormat`, `setLogSettingsColor`, `setLogSettingsBreakpoint`, `setLogSettingsConcurrency`. +`Blammo.Logging.Simple` has been expanded to include reƫxports of: + +- `Blammo.Logging.LogSettings` +- `Blammo.Logging.ThreadContext` + ## [v2.0.0.0](https://github.com/freckle/blammo/compare/v1.2.1.0...Blammo-v2.0.0.0) - Remove module `Network.Wai.Middleware.Logging`. It is moved to a new diff --git a/Blammo/README.lhs b/Blammo/README.lhs index 15c2d32..c0a7c8c 100644 --- a/Blammo/README.lhs +++ b/Blammo/README.lhs @@ -44,8 +44,6 @@ import Control.Monad.Reader (MonadReader, ReaderT (runReaderT)) ```haskell import Blammo.Logging.Simple -import Blammo.Logging.LogSettings -import Blammo.Logging.ThreadContext ``` Throughout your application, you should write against the ubiquitous diff --git a/Blammo/src/Blammo/Logging/Simple.hs b/Blammo/src/Blammo/Logging/Simple.hs index 4a21dc8..0a6ad0d 100644 --- a/Blammo/src/Blammo/Logging/Simple.hs +++ b/Blammo/src/Blammo/Logging/Simple.hs @@ -4,6 +4,8 @@ module Blammo.Logging.Simple , withLoggerEnv , runSimpleLoggingT , module Blammo.Logging + , module Blammo.Logging.LogSettings + , module Blammo.Logging.ThreadContext ) where import Prelude @@ -12,6 +14,8 @@ import Blammo.Logging import qualified Blammo.Logging.LogSettings.Env as Env import Control.Monad.IO.Class (MonadIO (..)) import Control.Monad.IO.Unlift (MonadUnliftIO) +import Blammo.Logging.LogSettings +import Blammo.Logging.ThreadContext -- | Construct a 'Logger' configured via environment variables newLoggerEnv :: MonadIO m => m Logger From 462d48e8255e3bf61085c000e3f0c125f4575664 Mon Sep 17 00:00:00 2001 From: Chris Martin Date: Tue, 30 Jul 2024 18:04:09 -0600 Subject: [PATCH 4/4] add Blammo.Logging.Setup module, expand Simple module --- Blammo-wai/README.lhs | 2 +- .../src/Network/Wai/Middleware/Logging.hs | 3 +- Blammo/Blammo.cabal | 1 + Blammo/CHANGELOG.md | 4 ++ Blammo/src/Blammo/Logging.hs | 23 +-------- Blammo/src/Blammo/Logging/Setup.hs | 51 +++++++++++++++++++ Blammo/src/Blammo/Logging/Simple.hs | 29 ++--------- Blammo/tests/Blammo/Logging/LoggerSpec.hs | 3 +- 8 files changed, 64 insertions(+), 52 deletions(-) create mode 100644 Blammo/src/Blammo/Logging/Setup.hs diff --git a/Blammo-wai/README.lhs b/Blammo-wai/README.lhs index 58c269e..bf27520 100644 --- a/Blammo-wai/README.lhs +++ b/Blammo-wai/README.lhs @@ -27,7 +27,7 @@ import Control.Lens (lens) ```haskell -- Blammo -import Blammo.Logging +import Blammo.Logging.Simple -- wai import Network.Wai (Middleware) diff --git a/Blammo-wai/src/Network/Wai/Middleware/Logging.hs b/Blammo-wai/src/Network/Wai/Middleware/Logging.hs index 34cf47e..72f6758 100644 --- a/Blammo-wai/src/Network/Wai/Middleware/Logging.hs +++ b/Blammo-wai/src/Network/Wai/Middleware/Logging.hs @@ -15,7 +15,8 @@ module Network.Wai.Middleware.Logging import Prelude import Blammo.Logging -import Blammo.Logging.ThreadContext +import Blammo.Logging.Setup (HasLogger, runWithLogger) +import Blammo.Logging.ThreadContext (Pair, withThreadContext) import Control.Applicative ((<|>)) import Control.Arrow ((***)) import Control.Monad.IO.Unlift (withRunInIO) diff --git a/Blammo/Blammo.cabal b/Blammo/Blammo.cabal index 04749de..2055649 100644 --- a/Blammo/Blammo.cabal +++ b/Blammo/Blammo.cabal @@ -32,6 +32,7 @@ library Blammo.Logging.LogSettings Blammo.Logging.LogSettings.Env Blammo.Logging.LogSettings.LogLevels + Blammo.Logging.Setup Blammo.Logging.Simple Blammo.Logging.Terminal Blammo.Logging.Terminal.LogPiece diff --git a/Blammo/CHANGELOG.md b/Blammo/CHANGELOG.md index 10b572c..48ccf58 100644 --- a/Blammo/CHANGELOG.md +++ b/Blammo/CHANGELOG.md @@ -12,10 +12,14 @@ into other modules. `LogColor (..)`, `setLogSettingsLevels`, `setLogSettingsDestination`, `setLogSettingsFormat`, `setLogSettingsColor`, `setLogSettingsBreakpoint`, `setLogSettingsConcurrency`. +- Moved from `Blammo.Logging` to new module `Blammo.Logging.Setup`: + `HasLogger (..)`, `withLogger`, `newLogger`, `runLoggerLoggingT`, `LoggingT`, + `WithLogger (..)`, `runWithLogger` `Blammo.Logging.Simple` has been expanded to include reƫxports of: - `Blammo.Logging.LogSettings` +- `Blammo.Logging.Setup` - `Blammo.Logging.ThreadContext` ## [v2.0.0.0](https://github.com/freckle/blammo/compare/v1.2.1.0...Blammo-v2.0.0.0) diff --git a/Blammo/src/Blammo/Logging.hs b/Blammo/src/Blammo/Logging.hs index a635e35..d7d7463 100644 --- a/Blammo/src/Blammo/Logging.hs +++ b/Blammo/src/Blammo/Logging.hs @@ -1,10 +1,6 @@ module Blammo.Logging ( LogLevel (..) , Logger - , HasLogger (..) - , withLogger - , newLogger - , runLoggerLoggingT -- * Re-exports from "Control.Monad.Logger.Aeson" @@ -13,12 +9,9 @@ module Blammo.Logging , (.=) , Series - -- ** Transformers + -- ** Classes , MonadLogger (..) , MonadLoggerIO (..) - , LoggingT - , WithLogger (..) - , runWithLogger -- ** Common logging functions @@ -41,19 +34,5 @@ module Blammo.Logging ) where import Blammo.Logging.Logger -import Blammo.Logging.WithLogger -import Control.Lens (view) -import Control.Monad.IO.Unlift (MonadUnliftIO) import Control.Monad.Logger.Aeson import Data.Aeson (Series) -import UnliftIO.Exception (finally) - --- | Initialize logging, pass a 'Logger' to the callback, and clean up at the end --- --- Applications should avoid calling this more than once in their lifecycle. -runLoggerLoggingT - :: (MonadUnliftIO m, HasLogger env) => env -> LoggingT m a -> m a -runLoggerLoggingT env f = - runLoggingT f (runLogAction logger) `finally` flushLogStr logger - where - logger = view loggerL env diff --git a/Blammo/src/Blammo/Logging/Setup.hs b/Blammo/src/Blammo/Logging/Setup.hs new file mode 100644 index 0000000..c7125f8 --- /dev/null +++ b/Blammo/src/Blammo/Logging/Setup.hs @@ -0,0 +1,51 @@ +module Blammo.Logging.Setup + ( HasLogger (..) + , withLogger + , newLogger + , runLoggerLoggingT + , LoggingT + , WithLogger (..) + , runWithLogger + , newLoggerEnv + , withLoggerEnv + , runSimpleLoggingT + ) where + +import Prelude + +import Blammo.Logging +import qualified Blammo.Logging.LogSettings.Env as Env +import Blammo.Logging.Logger +import Blammo.Logging.WithLogger +import Control.Lens (view) +import Control.Monad.IO.Class (MonadIO (..)) +import Control.Monad.IO.Unlift (MonadUnliftIO) +import Control.Monad.Logger.Aeson +import UnliftIO.Exception (finally) + +-- | Construct a 'Logger' configured via environment variables +newLoggerEnv :: MonadIO m => m Logger +newLoggerEnv = liftIO $ newLogger =<< Env.parse + +-- | Initialize logging (configured via environment variables), +-- pass a 'Logger' to the callback, and clean up at the end +-- +-- Applications should avoid calling this more than once in their lifecycle. +withLoggerEnv :: MonadUnliftIO m => (Logger -> m a) -> m a +withLoggerEnv f = liftIO Env.parse >>= \logger -> withLogger logger f + +-- | Construct a 'Logger' configured via environment variables and use it +runSimpleLoggingT :: MonadUnliftIO m => LoggingT m a -> m a +runSimpleLoggingT f = do + logger <- newLoggerEnv + runLoggerLoggingT logger f + +-- | Initialize logging, pass a 'Logger' to the callback, and clean up at the end +-- +-- Applications should avoid calling this more than once in their lifecycle. +runLoggerLoggingT + :: (MonadUnliftIO m, HasLogger env) => env -> LoggingT m a -> m a +runLoggerLoggingT env f = + runLoggingT f (runLogAction logger) `finally` flushLogStr logger + where + logger = view loggerL env diff --git a/Blammo/src/Blammo/Logging/Simple.hs b/Blammo/src/Blammo/Logging/Simple.hs index 0a6ad0d..c84674c 100644 --- a/Blammo/src/Blammo/Logging/Simple.hs +++ b/Blammo/src/Blammo/Logging/Simple.hs @@ -1,35 +1,12 @@ -- | Simplified out-of-the-box logging module Blammo.Logging.Simple - ( newLoggerEnv - , withLoggerEnv - , runSimpleLoggingT - , module Blammo.Logging + ( module Blammo.Logging , module Blammo.Logging.LogSettings , module Blammo.Logging.ThreadContext + , module Blammo.Logging.Setup ) where -import Prelude - import Blammo.Logging -import qualified Blammo.Logging.LogSettings.Env as Env -import Control.Monad.IO.Class (MonadIO (..)) -import Control.Monad.IO.Unlift (MonadUnliftIO) import Blammo.Logging.LogSettings +import Blammo.Logging.Setup import Blammo.Logging.ThreadContext - --- | Construct a 'Logger' configured via environment variables -newLoggerEnv :: MonadIO m => m Logger -newLoggerEnv = liftIO $ newLogger =<< Env.parse - --- | Initialize logging (configured via environment variables), --- pass a 'Logger' to the callback, and clean up at the end --- --- Applications should avoid calling this more than once in their lifecycle. -withLoggerEnv :: MonadUnliftIO m => (Logger -> m a) -> m a -withLoggerEnv f = liftIO Env.parse >>= \logger -> withLogger logger f - --- | Construct a 'Logger' configured via environment variables and use it -runSimpleLoggingT :: MonadUnliftIO m => LoggingT m a -> m a -runSimpleLoggingT f = do - logger <- newLoggerEnv - runLoggerLoggingT logger f diff --git a/Blammo/tests/Blammo/Logging/LoggerSpec.hs b/Blammo/tests/Blammo/Logging/LoggerSpec.hs index 19e53e4..e99dc0b 100644 --- a/Blammo/tests/Blammo/Logging/LoggerSpec.hs +++ b/Blammo/tests/Blammo/Logging/LoggerSpec.hs @@ -6,9 +6,8 @@ module Blammo.Logging.LoggerSpec import Prelude -import Blammo.Logging -import Blammo.Logging.LogSettings import Blammo.Logging.Logger +import Blammo.Logging.Simple import Control.Monad.Reader (runReaderT) import Data.Aeson (Value (..)) import qualified Data.Aeson.Compat as KeyMap