fast-logger 2.1.2 → 2.1.3
raw patch · 2 files changed
+45/−13 lines, 2 filesdep ~basedep ~bytestring
Dependency ranges changed: base, bytestring
Files
- System/Log/FastLogger.hs +34/−9
- fast-logger.cabal +11/−4
System/Log/FastLogger.hs view
@@ -1,13 +1,19 @@+-- | This module provides a fast logging system which+-- scales on multicore environments (i.e. +RTS -N\<x\>). {-# LANGUAGE BangPatterns, CPP #-} module System.Log.FastLogger ( -- * Creating a logger set- BufSize- , defaultBufSize- , LoggerSet+ LoggerSet+ , newFileLoggerSet+ , newStdoutLoggerSet+ , newStderrLoggerSet , newLoggerSet+ -- * Buffer size+ , BufSize+ , defaultBufSize+ -- * Renewing and removing a logger set , renewLoggerSet- -- * Removing a logger set , rmLoggerSet -- * Log messages , LogStr@@ -28,7 +34,7 @@ import Data.Array (Array, listArray, (!)) import Data.Maybe (isJust) import GHC.IO.Device (close)-import GHC.IO.FD (FD(..), openFile, stdout)+import GHC.IO.FD (FD(..), openFile, stderr, stdout) import GHC.IO.IOMode (IOMode(..)) import System.Log.FastLogger.File import System.Log.FastLogger.IO@@ -50,15 +56,29 @@ -- A buffer is prepared for each capability. data LoggerSet = LoggerSet (Maybe FilePath) (IORef FD) (Array Int Logger) +-- | Creating a new 'LoggerSet' using a file.+newFileLoggerSet :: BufSize -> FilePath -> IO LoggerSet+newFileLoggerSet size file = logOpen file >>= newFDLoggerSet size (Just file)++-- | Creating a new 'LoggerSet' using stdout.+newStdoutLoggerSet :: BufSize -> IO LoggerSet+newStdoutLoggerSet size = newFDLoggerSet size Nothing stdout++-- | Creating a new 'LoggerSet' using stderr.+newStderrLoggerSet :: BufSize -> IO LoggerSet+newStderrLoggerSet size = newFDLoggerSet size Nothing stderr++{-# DEPRECATED newLoggerSet "Use newFileLoggerSet etc instead" #-} -- | Creating a new 'LoggerSet'. -- If 'Nothing' is specified to the second argument, -- stdout is used. -- Please note that the minimum 'BufSize' is 1. newLoggerSet :: BufSize -> Maybe FilePath -> IO LoggerSet-newLoggerSet size mfile = do- fd <- case mfile of- Nothing -> return stdout- Just file -> logOpen file+newLoggerSet size = maybe (newStdoutLoggerSet size) (newFileLoggerSet size)++-- | Creating a new 'LoggerSet' using a FD.+newFDLoggerSet :: BufSize -> Maybe FilePath -> FD -> IO LoggerSet+newFDLoggerSet size mfile fd = do n <- getNumCapabilities loggers <- replicateM n $ newLogger (max 1 size) let arr = listArray (0,n-1) loggers@@ -66,6 +86,8 @@ return $ LoggerSet mfile fref arr -- | 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 (i, _) <- myThreadId >>= threadCapability@@ -74,6 +96,8 @@ pushLog fd logger logmsg -- | Flushing log messages in buffers.+-- This function must be called explicitly when the program is+-- being terminated. flushLogStr :: LoggerSet -> IO () flushLogStr (LoggerSet _ fref arr) = do n <- getNumCapabilities@@ -83,6 +107,7 @@ flushIt fd i = flushLog fd (arr ! i) -- | 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
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name: fast-logger-Version: 2.1.2+Version: 2.1.3 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -10,6 +10,10 @@ Cabal-Version: >= 1.8 Build-Type: Simple +Flag UseByteString102+ Description: Use bytestring 0.10.2 or newer+ Default: True+ Library GHC-Options: -Wall Exposed-Modules: System.Log.FastLogger@@ -20,12 +24,15 @@ System.Log.FastLogger.Logger Build-Depends: base >= 4 && < 5 , array- -- FIXME: blaze-builder should be removed someday- , blaze-builder- , bytestring , directory , filepath , text++ if flag(UseByteString102)+ Build-Depends: bytestring >= 0.10.2+ else+ Build-Depends: blaze-builder+ , bytestring < 0.10.2 Test-Suite spec Main-Is: Spec.hs