packages feed

fast-logger 2.0.3 → 2.1.0

raw patch · 3 files changed

+57/−38 lines, 3 files

Files

System/Log/FastLogger.hs view
@@ -4,7 +4,6 @@   -- * Creating a logger set     BufSize   , defaultBufSize-  , logOpen   , LoggerSet   , newLoggerSet   , renewLoggerSet@@ -13,8 +12,8 @@   -- * Log messages   , LogStr   , ToLogStr(..)+  , fromLogStr   , logStrLength-  , logStrBuilder   -- * Writing a log message   , pushLogStr   -- * Flushing buffered log messages@@ -27,8 +26,9 @@ import Control.Concurrent (getNumCapabilities, myThreadId, threadCapability, takeMVar) import Control.Monad (when, replicateM) import Data.Array (Array, listArray, (!))+import Data.Maybe (isJust) import GHC.IO.Device (close)-import GHC.IO.FD (FD(..), openFile)+import GHC.IO.FD (FD(..), openFile, stdout) import GHC.IO.IOMode (IOMode(..)) import System.Log.FastLogger.File import System.Log.FastLogger.IO@@ -48,20 +48,25 @@ --   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 (IORef FD) (Array Int Logger)+data LoggerSet = LoggerSet (Maybe FilePath) (IORef FD) (Array Int Logger)  -- | Creating a new 'LoggerSet'.-newLoggerSet :: BufSize -> FD -> IO LoggerSet-newLoggerSet size fd = do+--   If 'Nothing' is specified to the second argument,+--   stdout is used.+newLoggerSet :: BufSize -> Maybe FilePath -> IO LoggerSet+newLoggerSet size mfile = do+    fd <- case mfile of+        Nothing   -> return stdout+        Just file -> logOpen file     n <- getNumCapabilities     loggers <- replicateM n $ newLogger size     let arr = listArray (0,n-1) loggers     fref <- newIORef fd-    return $ LoggerSet fref arr+    return $ LoggerSet mfile fref arr  -- | Writing a log message to the corresponding buffer. pushLogStr :: LoggerSet -> LogStr -> IO ()-pushLogStr (LoggerSet fref arr) logmsg = do+pushLogStr (LoggerSet _ fref arr) logmsg = do     (i, _) <- myThreadId >>= threadCapability     let logger = arr ! i     fd <- readIORef fref@@ -69,28 +74,31 @@  -- | Flushing log messages in buffers. flushLogStr :: LoggerSet -> IO ()-flushLogStr (LoggerSet fref arr) = do+flushLogStr (LoggerSet _ fref arr) = do     n <- getNumCapabilities     fd <- readIORef fref     mapM_ (flushIt fd) [0..n-1]   where     flushIt fd i = flushLog fd (arr ! i) --- | Renewing 'FD' in 'LoggerSet'. Old 'FD' is closed.-renewLoggerSet :: LoggerSet -> FD -> IO ()-renewLoggerSet (LoggerSet fref _) newfd = do+-- | Renewing the internal file information in 'LoggerSet'.+renewLoggerSet :: LoggerSet -> IO ()+renewLoggerSet (LoggerSet Nothing     _    _) = return ()+renewLoggerSet (LoggerSet (Just file) fref _) = do+    newfd <- logOpen file     oldfd <- atomicModifyIORef' fref (\fd -> (newfd, fd))     close oldfd --- | Flushing the buffers, closing 'FD' and freeing the buffers.+-- | Flushing the buffers, closing the internal file information+--   and freeing the buffers. rmLoggerSet :: LoggerSet -> IO ()-rmLoggerSet (LoggerSet fref arr) = do+rmLoggerSet (LoggerSet mfile fref arr) = do     n <- getNumCapabilities     fd <- readIORef fref     let nums = [0..n-1]     mapM_ (flushIt fd) nums     mapM_ freeIt nums-    when (fdFD fd /= 1) $ close fd+    when (isJust mfile) $ close fd   where     flushIt fd i = flushLog fd (arr ! i)     freeIt i = do
System/Log/FastLogger/LogStr.hs view
@@ -4,22 +4,25 @@ module System.Log.FastLogger.LogStr (     Builder   , LogStr(..)+  , logStrLength+  , fromLogStr   , ToLogStr(..)   , mempty   , (<>)   ) where  #if MIN_VERSION_bytestring(0,10,2)-import Data.ByteString.Builder (Builder, byteString)+import Data.ByteString.Builder (Builder)+import qualified Data.ByteString.Builder as B #else-import qualified Blaze.ByteString.Builder as BB (fromByteString)+import qualified Blaze.ByteString.Builder as BB import Blaze.ByteString.Builder.Internal.Types as BB (Builder(..)) #endif-import Data.ByteString.Internal (ByteString(..))-import Data.Monoid (Monoid, mempty, mappend) import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as S8-import qualified Data.ByteString.Lazy as L+import Data.ByteString.Internal (ByteString(..))+import qualified Data.ByteString.Lazy as BL+import Data.Monoid (Monoid, mempty, mappend) #if MIN_VERSION_base(4,5,0) import Data.Monoid ((<>)) #endif@@ -36,23 +39,27 @@ (<>) = mappend #endif -#if !MIN_VERSION_bytestring(0,10,2)-byteString :: ByteString -> Builder-byteString = BB.fromByteString+toBuilder :: ByteString -> Builder+#if MIN_VERSION_bytestring(0,10,2)+toBuilder = B.byteString+#else+toBuilder = BB.fromByteString #endif +fromBuilder :: Builder -> ByteString+#if MIN_VERSION_bytestring(0,10,2)+fromBuilder = BL.toStrict . B.toLazyByteString+#else+fromBuilder = BB.toByteString+#endif+ ----------------------------------------------------------------  -- | Log message builder. Use ('<>') to append two LogStr in O(1).-data LogStr = LogStr {-  -- | Obtaining the length of 'LogStr'.-    logStrLength :: !Int-  -- | Obtaining the 'Builder' of 'LogStr'.-  , logStrBuilder :: Builder-  }+data LogStr = LogStr !Int Builder  instance Monoid LogStr where-    mempty = LogStr 0 (byteString BS.empty)+    mempty = LogStr 0 (toBuilder BS.empty)     LogStr s1 b1 `mappend` LogStr s2 b2 = LogStr (s1 + s2) (b1 <> b2)  instance IsString LogStr where@@ -64,9 +71,9 @@ instance ToLogStr LogStr where     toLogStr = id instance ToLogStr S8.ByteString where-    toLogStr = fromByteString-instance ToLogStr L.ByteString where-    toLogStr = fromByteString . S8.concat . L.toChunks+    toLogStr bs = LogStr (BS.length bs) (toBuilder bs)+instance ToLogStr BL.ByteString where+    toLogStr = toLogStr . S8.concat . BL.toChunks instance ToLogStr String where     toLogStr = toLogStr . TL.pack instance ToLogStr T.Text where@@ -74,6 +81,10 @@ instance ToLogStr TL.Text where     toLogStr = toLogStr . TL.encodeUtf8 --- | Creating 'LogStr'-fromByteString :: ByteString -> LogStr-fromByteString bs = LogStr (BS.length bs) (byteString bs)+-- | Obtaining the length of 'LogStr'.+logStrLength :: LogStr -> Int+logStrLength (LogStr n _) = n++-- | Converting 'LogStr' to 'ByteString'.+fromLogStr :: LogStr -> ByteString+fromLogStr (LogStr _ builder) = fromBuilder builder
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name:                   fast-logger-Version:                2.0.3+Version:                2.1.0 Author:                 Kazu Yamamoto <kazu@iij.ad.jp> Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp> License:                BSD3@@ -14,7 +14,7 @@   GHC-Options:          -Wall   Exposed-Modules:      System.Log.FastLogger                         System.Log.FastLogger.File-                        System.Log.FastLogger.IO+  Other-Modules:        System.Log.FastLogger.IO                         System.Log.FastLogger.IORef                         System.Log.FastLogger.LogStr                         System.Log.FastLogger.Logger