polysemy-log 0.4.0.0 → 0.4.1.0
raw patch · 2 files changed
+21/−5 lines, 2 filesdep +asyncPVP ok
version bump matches the API change (PVP)
Dependencies added: async
API changes (from Hackage documentation)
+ Polysemy.Log.Conc: finalize :: forall msg r. Members [Queue msg, Resource, Async, Race, Embed IO] r => Async (Maybe ()) -> Sem r ()
Files
- lib/Polysemy/Log/Conc.hs +19/−4
- polysemy-log.cabal +2/−1
lib/Polysemy/Log/Conc.hs view
@@ -2,15 +2,18 @@ module Polysemy.Log.Conc where import Polysemy (interceptH, runT, subsume)-import Polysemy.Async (Async, async)+import Polysemy.Async (Async, async, await) import Polysemy.Conc (Queue, Race, interpretQueueTBM) import qualified Polysemy.Conc.Queue as Queue import Polysemy.Conc.Queue.Result (resultToMaybe) import Polysemy.Internal.Tactics (liftT)-import Polysemy.Resource (Resource)+import Polysemy.Resource (Resource, finally) import qualified Polysemy.Log.Data.DataLog as DataLog import Polysemy.Log.Data.DataLog (DataLog (DataLog, Local))+import qualified Control.Concurrent.Async as Base+import qualified Polysemy.Conc as Conc+import Polysemy.Time (Seconds(Seconds)) -- |Intercept 'DataLog' for concurrent processing. -- This does not send any action to the ultimate interpreter but writes all log messages to the provided queue.@@ -55,6 +58,18 @@ DataLog.dataLog @msg msg spin +-- |Close the concurrent logger's queue and wait for one second to allow it to process any messages that have been+-- queued.+finalize ::+ ∀ msg r .+ Members [Queue msg, Resource, Async, Race, Embed IO] r =>+ Base.Async (Maybe ()) ->+ Sem r ()+finalize handle =+ Conc.timeoutU (Seconds 1) do+ Queue.close @msg+ void (await handle)+ -- |Intercept 'DataLog' for concurrent processing. -- Creates a queue and starts a worker thread. -- All log messages received by the interceptor in 'interceptDataLogConcWithLocal' are written to the queue and sent to@@ -74,6 +89,6 @@ Sem r a interceptDataLogConc maxQueued sem = do interpretQueueTBM @msg maxQueued do- !_ <- async (loggerThread @msg)- interceptDataLogConcWith @msg (raise sem)+ !handle <- async (loggerThread @msg)+ finally (interceptDataLogConcWith @msg (raise sem)) (finalize @msg handle) {-# inline interceptDataLogConc #-}
polysemy-log.cabal view
@@ -5,7 +5,7 @@ -- see: https://github.com/sol/hpack name: polysemy-log-version: 0.4.0.0+version: 0.4.1.0 synopsis: Polysemy Effects for Logging description: See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html> category: Logging@@ -111,6 +111,7 @@ ghc-options: -Wall -Wredundant-constraints -Wunused-packages -Widentities build-depends: ansi-terminal >=0.10.3+ , async , base ==4.* , polysemy >=1.5 , polysemy-conc >=0.3