fast-logger 2.1.5 → 2.2.0
raw patch · 2 files changed
+21/−8 lines, 2 filesdep +auto-update
Dependencies added: auto-update
Files
- System/Log/FastLogger.hs +19/−7
- fast-logger.cabal +2/−1
System/Log/FastLogger.hs view
@@ -29,6 +29,7 @@ ) where import Control.Applicative ((<$>))+import Control.AutoUpdate (mkAutoUpdate, defaultUpdateSettings, updateAction) import Control.Concurrent (getNumCapabilities, myThreadId, threadCapability, takeMVar) import Control.Monad (when, replicateM) import Data.Array (Array, listArray, (!), bounds)@@ -54,7 +55,7 @@ -- The number of loggers is the capabilities of GHC RTS. -- You can specify it with \"+RTS -N\<x\>\". -- A buffer is prepared for each capability.-data LoggerSet = LoggerSet (Maybe FilePath) (IORef FD) (Array Int Logger)+data LoggerSet = LoggerSet (Maybe FilePath) (IORef FD) (Array Int Logger) (IO ()) -- | Creating a new 'LoggerSet' using a file. newFileLoggerSet :: BufSize -> FilePath -> IO LoggerSet@@ -83,13 +84,16 @@ loggers <- replicateM n $ newLogger (max 1 size) let arr = listArray (0,n-1) loggers fref <- newIORef fd- return $ LoggerSet mfile fref arr+ flush <- mkAutoUpdate defaultUpdateSettings+ { updateAction = flushLogStrRaw fref arr+ }+ return $ LoggerSet mfile fref arr flush -- | Writing a log message to the corresponding buffer. -- If the buffer becomes full, the log messages in the buffer -- are written to its corresponding file, stdout, or stderr. pushLogStr :: LoggerSet -> LogStr -> IO ()-pushLogStr (LoggerSet _ fref arr) logmsg = do+pushLogStr (LoggerSet _ fref arr flush) logmsg = do (i, _) <- myThreadId >>= threadCapability -- The number of capability could be dynamically changed. -- So, let's check the upper boundary of the array.@@ -100,12 +104,20 @@ let logger = arr ! j fd <- readIORef fref pushLog fd logger logmsg+ flush -- | Flushing log messages in buffers. -- This function must be called explicitly when the program is -- being terminated.+--+-- Note: Since version 2.1.6, this function does not need to be+-- explicitly called, as every push includes an auto-debounced flush+-- courtesy of the auto-update package. flushLogStr :: LoggerSet -> IO ()-flushLogStr (LoggerSet _ fref arr) = do+flushLogStr (LoggerSet _ _ _ go) = go++flushLogStrRaw :: IORef FD -> Array Int Logger -> IO ()+flushLogStrRaw fref arr = do let (l,u) = bounds arr fd <- readIORef fref mapM_ (flushIt fd) [l .. u]@@ -115,8 +127,8 @@ -- | Renewing the internal file information in 'LoggerSet'. -- This does nothing for stdout and stderr. renewLoggerSet :: LoggerSet -> IO ()-renewLoggerSet (LoggerSet Nothing _ _) = return ()-renewLoggerSet (LoggerSet (Just file) fref _) = do+renewLoggerSet (LoggerSet Nothing _ _ _) = return ()+renewLoggerSet (LoggerSet (Just file) fref _ _) = do newfd <- logOpen file oldfd <- atomicModifyIORef' fref (\fd -> (newfd, fd)) close oldfd@@ -124,7 +136,7 @@ -- | Flushing the buffers, closing the internal file information -- and freeing the buffers. rmLoggerSet :: LoggerSet -> IO ()-rmLoggerSet (LoggerSet mfile fref arr) = do+rmLoggerSet (LoggerSet mfile fref arr _) = do let (l,u) = bounds arr fd <- readIORef fref let nums = [l .. u]
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name: fast-logger-Version: 2.1.5+Version: 2.2.0 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -20,6 +20,7 @@ System.Log.FastLogger.Logger Build-Depends: base >= 4 && < 5 , array+ , auto-update -- FIXME: blaze-builder should be removed someday , blaze-builder , bytestring