packages feed

fast-logger 0.2.2 → 0.3.0

raw patch · 3 files changed

+39/−55 lines, 3 filesdep +date-cachedep −HUnitdep −QuickCheckPVP ok

version bump matches the API change (PVP)

Dependencies added: date-cache

Dependencies removed: HUnit, QuickCheck

API changes (from Hackage documentation)

- System.Log.FastLogger.Date: data DateRef
- System.Log.FastLogger.Date: dateInit :: IO DateRef
- System.Log.FastLogger.Date: getDate :: DateRef -> IO ZonedDate
- System.Log.FastLogger.Date: instance Eq DateCache
- System.Log.FastLogger.Date: instance Show DateCache
+ System.Log.FastLogger: mkLogger2 :: Bool -> Handle -> (DateCacheGetter, DateCacheCloser) -> IO Logger
+ System.Log.FastLogger.Date: zonedDateCacheConf :: DateCacheConf EpochTime

Files

System/Log/FastLogger.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE NoImplicitPrelude, RecordWildCards #-} {-# LANGUAGE FlexibleInstances, BangPatterns #-}+{-# LANGUAGE OverloadedStrings #-}  -- | Fast logging system to copy log data directly to Handle buffer. @@ -7,6 +8,7 @@   -- * Logger     Logger   , mkLogger+  , mkLogger2   , renewLogger   , rmLogger   -- * Logging@@ -16,15 +18,15 @@   -- * Strings   , LogStr(..)   , ToLogStr(..)-  -- * Misc functions+  -- * Date   , loggerDate+  , module System.Log.FastLogger.Date   -- * File rotation   , module System.Log.FastLogger.File   ) where  import Blaze.ByteString.Builder import Blaze.ByteString.Builder.Char8 (fromString)-import Control.Applicative import Control.Monad import qualified Data.ByteString as BS import Data.ByteString.Internal (ByteString(..), c2w)@@ -44,6 +46,7 @@ import GHC.IORef import GHC.Num import GHC.Real+import System.Date.Cache import System.IO import System.Log.FastLogger.Date import System.Log.FastLogger.File@@ -56,9 +59,10 @@  -- | Abstract data type for logger. data Logger = Logger {-    loggerAutoFlush :: Bool-  , loggerHandle    :: Handle-  , loggerDateRef   :: DateRef+    loggerAutoFlush  :: Bool+  , loggerHandle     :: Handle+  , loggerDateGetter :: DateCacheGetter+  , loggerDateCloser :: DateCacheCloser   }  logBufSize :: Int@@ -68,12 +72,21 @@ initHandle hdl = hSetBuffering hdl (BlockBuffering (Just logBufSize))  -- | Creates a 'Logger' from the given handle.+-- ('ondemandDateCacher' 'zonedDateCacheConf') is used as a Date getter. mkLogger :: Bool -- ^ Automatically flush on each loggerPut?          -> Handle -- ^ If 'Handle' is associated with a file, 'AppendMode' must be used.          -> IO Logger-mkLogger autoFlush hdl = do+mkLogger autoFlush hdl =+    ondemandDateCacher zonedDateCacheConf >>= mkLogger2 autoFlush hdl++-- | Creates a 'Logger' from the given handle.+mkLogger2 :: Bool -- ^ Automatically flush on each loggerPut?+          -> Handle -- ^ If 'Handle' is associated with a file, 'AppendMode' must be used.+          -> (DateCacheGetter, DateCacheCloser) -- ^ Date getter/closer. E.g. ('clockDateCacher' 'zonedDateCacheConf')           +          -> IO Logger+mkLogger2 autoFlush hdl (getter,closer) = do     initHandle hdl-    Logger autoFlush hdl <$> dateInit+    return $ Logger autoFlush hdl getter closer  -- | Creates a new 'Logger' from old one by replacing 'Handle'. -- The new 'Handle' automatically inherits the file mode of@@ -89,7 +102,7 @@  -- | Destroy a 'Logger' by closing internal 'Handle'. rmLogger :: Logger -> IO ()-rmLogger (Logger _ hdl _) = hClose hdl+rmLogger lgr = hClose (loggerHandle lgr) >> loggerDateCloser lgr  -- | A date type to contain 'String' and 'ByteString'. -- This data is exported so that format can be defined.@@ -191,4 +204,4 @@  -- | Obtaining date string from 'Logger'. loggerDate :: Logger -> IO ZonedDate-loggerDate logger = getDate $ loggerDateRef logger+loggerDate logger = loggerDateGetter logger
System/Log/FastLogger/Date.hs view
@@ -2,63 +2,35 @@  module System.Log.FastLogger.Date (     ZonedDate-  , DateRef-  , dateInit-  , getDate+  , zonedDateCacheConf   ) where -import Control.Applicative-import Data.ByteString (ByteString)-import Data.IORef+import Data.ByteString+import System.Date.Cache #if WINDOWS import qualified Data.ByteString.Char8 as BS import Data.Time import System.Locale-#define TIME UTCTime-#define GETTIME getCurrentTime #else import Data.UnixTime import System.Posix (EpochTime, epochTime)-#define TIME EpochTime-#define GETTIME epochTime #endif  -- | A type for zoned date. type ZonedDate = ByteString -data DateCache = DateCache {-    timeKey  :: !TIME-  , zonedDate :: !ZonedDate-  } deriving (Eq, Show)---- | Reference to the 'ZonedDate' cache.-newtype DateRef = DateRef (IORef DateCache)---- | Getting 'ZonedDate' from the 'ZonedDate' cache.-getDate :: DateRef -> IO ZonedDate-getDate (DateRef ref) = do-    newEt <- GETTIME-    cache <- readIORef ref-    let oldEt = timeKey cache-    if oldEt == newEt then-        return $ zonedDate cache-      else do-        newCache <- newDate newEt-        writeIORef ref newCache-        return $ zonedDate newCache--newDate :: TIME -> IO DateCache #if WINDOWS-newDate et = DateCache et . format <$> toZonedTime et-  where-    format = BS.pack . formatTime defaultTimeLocale "%d/%b/%Y:%T %z"-    toZonedTime = utcToLocalZonedTime+zonedDateCacheConf :: DateCacheConf UTCTime+zonedDateCacheConf = DateCacheConf {+    getTime = getCurrentTime+  , formatDate ut = do+      zt <- utcToLocalZonedTime ut+      return $ BS.pack $ formatTime defaultTimeLocale "%d/%b/%Y:%T %z" zt+  } #else-newDate et = return $ DateCache et $ toZonedTime et-  where-    toZonedTime = formatUnixTime "%d/%b/%Y:%T %z" . fromEpochTime+zonedDateCacheConf :: DateCacheConf EpochTime+zonedDateCacheConf = DateCacheConf {+    getTime = epochTime+  , formatDate = return . formatUnixTime "%d/%b/%Y:%T %z" . fromEpochTime+  } #endif---- | Initializing the 'ZonedDate' cache.-dateInit :: IO DateRef-dateInit = DateRef <$> (GETTIME >>= newDate >>= newIORef)
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name:                   fast-logger-Version:                0.2.2+Version:                0.3.0 Author:                 Kazu Yamamoto <kazu@iij.ad.jp> Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp> License:                BSD3@@ -18,6 +18,7 @@   Build-Depends:        base >= 4 && < 5                       , blaze-builder                       , bytestring+                      , date-cache >= 0.3                       , directory                       , filepath                       , text@@ -36,8 +37,6 @@      Ghc-Options:     -Wall     Build-Depends:   base >= 4 && < 5-                   , HUnit-                   , QuickCheck                    , bytestring                    , fast-logger                    , hspec