fast-logger 2.4.1 → 2.4.2
raw patch · 6 files changed
+98/−23 lines, 6 filesdep +Win32dep ~bytestringPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: Win32
Dependency ranges changed: bytestring
API changes (from Hackage documentation)
- System.Log.FastLogger.File: log_backup_number :: FileLogSpec -> Int
- System.Log.FastLogger.File: log_file :: FileLogSpec -> FilePath
- System.Log.FastLogger.File: log_file_size :: FileLogSpec -> Integer
+ System.Log.FastLogger.File: [log_backup_number] :: FileLogSpec -> Int
+ System.Log.FastLogger.File: [log_file] :: FileLogSpec -> FilePath
+ System.Log.FastLogger.File: [log_file_size] :: FileLogSpec -> Integer
Files
- ChangeLog.md +19/−0
- System/Log/FastLogger.hs +8/−16
- System/Log/FastLogger/FileIO.hs +61/−0
- System/Log/FastLogger/IO.hs +2/−3
- System/Log/FastLogger/Logger.hs +2/−2
- fast-logger.cabal +6/−2
ChangeLog.md view
@@ -1,3 +1,22 @@+## 2.4.2++* Fixing a buf of long log messages [#80](https://github.com/kazu-yamamoto/logger/pull/80)+* Log rotation support for Windows [#79](https://github.com/kazu-yamamoto/logger/pull/79)+* Unsupporting GHC 7.4.++## 2.4.1++* Restore compatibility with bytestring < 0.10+* Mark fast-logger modules as Safe/Trustworth [#68](https://github.com/kazu-yamamoto/logger/pull/68)++## 2.4.0++* Providing pushLogStrLn. [#64](https://github.com/kazu-yamamoto/logger/pull/64)++## 2.3.1++* No changes.+ ## 2.3.0 * Move from blaze-builder to `Data.ByteString.Builder` [#55](https://github.com/kazu-yamamoto/logger/pull/55)
System/Log/FastLogger.hs view
@@ -1,6 +1,6 @@ -- | This module provides a fast logging system which -- scales on multicore environments (i.e. +RTS -N\<x\>).-{-# LANGUAGE BangPatterns, CPP #-}+{-# LANGUAGE CPP #-} {-# LANGUAGE Safe #-} module System.Log.FastLogger (@@ -38,23 +38,15 @@ import Control.Monad (when, replicateM) import Data.Array (Array, listArray, (!), bounds) import Data.Maybe (isJust)-import GHC.IO.Device (close)-import GHC.IO.FD (FD(..), openFile, stderr, stdout)-import GHC.IO.IOMode (IOMode(..)) import System.Log.FastLogger.File import System.Log.FastLogger.IO+import System.Log.FastLogger.FileIO import System.Log.FastLogger.IORef import System.Log.FastLogger.LogStr import System.Log.FastLogger.Logger ---------------------------------------------------------------- --- | Opening a log file.-logOpen :: FilePath -> IO FD-logOpen file = fst <$> openFile file AppendMode False------------------------------------------------------------------- -- | A set of loggers. -- The number of loggers is the capabilities of GHC RTS. -- You can specify it with \"+RTS -N\<x\>\".@@ -63,15 +55,15 @@ -- | Creating a new 'LoggerSet' using a file. newFileLoggerSet :: BufSize -> FilePath -> IO LoggerSet-newFileLoggerSet size file = logOpen file >>= newFDLoggerSet size (Just file)+newFileLoggerSet size file = openFileFD file >>= newFDLoggerSet size (Just file) -- | Creating a new 'LoggerSet' using stdout. newStdoutLoggerSet :: BufSize -> IO LoggerSet-newStdoutLoggerSet size = newFDLoggerSet size Nothing stdout+newStdoutLoggerSet size = getStdoutFD >>= newFDLoggerSet size Nothing -- | Creating a new 'LoggerSet' using stderr. newStderrLoggerSet :: BufSize -> IO LoggerSet-newStderrLoggerSet size = newFDLoggerSet size Nothing stderr+newStderrLoggerSet size = getStderrFD >>= newFDLoggerSet size Nothing {-# DEPRECATED newLoggerSet "Use newFileLoggerSet etc instead" #-} -- | Creating a new 'LoggerSet'.@@ -139,9 +131,9 @@ renewLoggerSet :: LoggerSet -> IO () renewLoggerSet (LoggerSet Nothing _ _ _) = return () renewLoggerSet (LoggerSet (Just file) fref _ _) = do- newfd <- logOpen file+ newfd <- openFileFD file oldfd <- atomicModifyIORef' fref (\fd -> (newfd, fd))- close oldfd+ closeFD oldfd -- | Flushing the buffers, closing the internal file information -- and freeing the buffers.@@ -152,7 +144,7 @@ let nums = [l .. u] mapM_ (flushIt fd) nums mapM_ freeIt nums- when (isJust mfile) $ close fd+ when (isJust mfile) $ closeFD fd where flushIt fd i = flushLog fd (arr ! i) freeIt i = do
+ System/Log/FastLogger/FileIO.hs view
@@ -0,0 +1,61 @@+{-# LANGUAGE CPP #-}++module System.Log.FastLogger.FileIO where++import Foreign.Ptr (Ptr)+import Data.Word (Word8)++#ifdef mingw32_HOST_OS+import System.Win32.Types (HANDLE)+import System.Win32.File+import Graphics.Win32.Misc (getStdHandle, sTD_OUTPUT_HANDLE, sTD_ERROR_HANDLE)+import Data.Bits ((.|.))++type FD = HANDLE++closeFD :: FD -> IO ()+closeFD = closeHandle++openFileFD :: FilePath -> IO FD+openFileFD f = createFile f+ (gENERIC_READ .|. gENERIC_WRITE)+ (fILE_SHARE_READ .|. fILE_SHARE_DELETE)+ Nothing+ oPEN_ALWAYS+ fILE_ATTRIBUTE_NORMAL+ Nothing++getStderrFD :: IO FD+getStderrFD = getStdHandle sTD_ERROR_HANDLE++getStdoutFD :: IO FD+getStdoutFD = getStdHandle sTD_OUTPUT_HANDLE++writeRawBufferPtr2FD :: FD -> Ptr Word8 -> Int -> IO Int+writeRawBufferPtr2FD h bf len = fromIntegral `fmap` win32_WriteFile h bf (fromIntegral len) Nothing++#else++import GHC.IO.Device (close)+import qualified GHC.IO.FD as POSIX (FD(..))+import GHC.IO.FD (openFile, stderr, stdout, writeRawBufferPtr)+import GHC.IO.IOMode (IOMode(..))++type FD = POSIX.FD++closeFD :: FD -> IO ()+closeFD = close++openFileFD :: FilePath -> IO FD+openFileFD f = fst `fmap` openFile f AppendMode False++getStderrFD :: IO FD+getStderrFD = return stderr++getStdoutFD :: IO FD+getStdoutFD = return stdout++writeRawBufferPtr2FD :: FD -> Ptr Word8 -> Int -> IO Int+writeRawBufferPtr2FD fd bf len = fromIntegral `fmap` writeRawBufferPtr "write" fd bf 0 (fromIntegral len)++#endif
System/Log/FastLogger/IO.hs view
@@ -38,6 +38,5 @@ More minSize writer' | size < minSize -> error "toBufIOWith: More: minSize" | otherwise -> loop writer'- Chunk (PS fptr off siz) writer'- | len == 0 -> loop writer' -- flushing- | otherwise -> withForeignPtr fptr $ \ptr -> io (ptr `plusPtr` off) siz+ Chunk (PS fptr off siz) writer' ->+ withForeignPtr fptr $ \ptr -> io (ptr `plusPtr` off) siz >> loop writer'
System/Log/FastLogger/Logger.hs view
@@ -11,7 +11,7 @@ import Control.Concurrent (MVar, newMVar, withMVar) import Control.Monad (when) import Foreign.Ptr (plusPtr)-import GHC.IO.FD (FD, writeRawBufferPtr)+import System.Log.FastLogger.FileIO import System.Log.FastLogger.IO import System.Log.FastLogger.LogStr import System.Log.FastLogger.IORef@@ -77,6 +77,6 @@ write fd buf len' = loop buf (fromIntegral len') where loop bf !len = do- written <- writeRawBufferPtr "write" fd bf 0 (fromIntegral len)+ written <- writeRawBufferPtr2FD fd bf len when (written < len) $ loop (bf `plusPtr` fromIntegral written) (len - written)
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name: fast-logger-Version: 2.4.1+Version: 2.4.2 Author: Kazu Yamamoto <kazu@iij.ad.jp> Maintainer: Kazu Yamamoto <kazu@iij.ad.jp> License: BSD3@@ -16,10 +16,11 @@ Exposed-Modules: System.Log.FastLogger System.Log.FastLogger.File Other-Modules: System.Log.FastLogger.IO+ System.Log.FastLogger.FileIO System.Log.FastLogger.IORef System.Log.FastLogger.LogStr System.Log.FastLogger.Logger- Build-Depends: base >= 4.4 && < 5+ Build-Depends: base >= 4.5 && < 5 , array , auto-update >= 0.1.2 , bytestring@@ -27,6 +28,9 @@ , directory , filepath , text+ if os(windows)+ Build-Depends:+ Win32 Test-Suite spec Main-Is: Spec.hs