yam-logger (empty) → 0.3.0
raw patch · 4 files changed
+154/−0 lines, 4 filesdep +aesondep +basedep +fast-loggersetup-changed
Dependencies added: aeson, base, fast-logger, monad-logger, string-conversions, text, wai-logger
Files
- README.md +1/−0
- Setup.hs +2/−0
- src/Yam/Logger.hs +109/−0
- yam-logger.cabal +42/−0
+ README.md view
@@ -0,0 +1,1 @@+# yam-logger
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ src/Yam/Logger.hs view
@@ -0,0 +1,109 @@+module Yam.Logger(+ LogRank(..)+ , Logger+ , LoggerConfig(..)+ , LogFunc+ , defaultLoggerConfig+ , stdoutLoggerConfig+ , toApacheLogger+ , toMonadLogger+ , logger+ , logL+ , logLn+ , traceLn+ , debugLn+ , infoLn+ , warnLn+ , errorLn+ ) where++import Control.Monad (when)+import Control.Monad.IO.Class (MonadIO, liftIO)+import Control.Monad.Logger+import Data.Aeson+import Data.Monoid ((<>))+import Data.String.Conversions (cs)+import Data.Text (Text, intercalate, pack)+import Network.Wai.Logger+import System.Log.FastLogger++data LogRank+ = TRACE+ | DEBUG+ | INFO+ | WARN+ | ERROR+ deriving (Show, Eq, Ord)++instance FromJSON LogRank where+ parseJSON v = go <$> parseJSON v+ where go :: Text -> LogRank+ go "trace" = TRACE+ go "debug" = DEBUG+ go "info" = INFO+ go "warn" = WARN+ go "error" = ERROR+ go _ = INFO++type Logger = LogStr -> IO ()+type Clock = IO FormattedTime++data LoggerConfig = LoggerConfig+ { func :: Logger+ , clock :: Clock+ , names :: [Text]+ , rank :: LogRank+ }++defaultLoggerConfig :: IO LoggerConfig+defaultLoggerConfig = do+ c <- newTimeCache "%F %X"+ return $ LoggerConfig (\_ -> return ()) c [] INFO++stdoutLoggerConfig :: IO LoggerConfig+stdoutLoggerConfig = do+ lc <- defaultLoggerConfig+ ls <- newStdoutLoggerSet 4096+ return lc { func = pushLogStr ls }++logger :: LoggerConfig -> LogRank -> Logger+logger LoggerConfig{..} r str = when (r >= rank) $ do+ now <- clock+ func $ toLogStr (cs now <> " [" <> pack (show r) <> "] - " <> intercalate "." names <> " - ") <> str++toApacheLogger :: LoggerConfig -> IO ApacheLoggerActions+toApacheLogger lc@LoggerConfig{..} = initLogger FromFallback (LogCallback (logger lc INFO) (return ())) clock++toRank :: LogLevel -> LogRank+toRank LevelDebug = DEBUG+toRank LevelInfo = INFO+toRank LevelWarn = WARN+toRank LevelError = ERROR+toRank _ = INFO++type LogFunc = Loc -> LogSource -> LogLevel -> LogStr -> IO ()++toMonadLogger :: LoggerConfig -> LogFunc+toMonadLogger lc@LoggerConfig{..} _ ls level str = logger lc {names=ls:names} (toRank level) str++logL :: forall msg . (ToLogStr msg) => LoggerConfig -> LogRank -> msg -> IO ()+logL lc rank = logger lc rank . toLogStr++logLn :: LoggerConfig -> LogRank -> Text -> IO ()+logLn lc rank msg = logL lc rank $ msg <> "\n"++traceLn :: MonadIO m => LoggerConfig -> Text -> m ()+traceLn lc = liftIO . logLn lc TRACE+{-# INLINE traceLn #-}+debugLn :: MonadIO m => LoggerConfig -> Text -> m ()+debugLn lc = liftIO . logLn lc DEBUG+{-# INLINE debugLn #-}+infoLn :: MonadIO m => LoggerConfig -> Text -> m ()+infoLn lc = liftIO . logLn lc INFO+{-# INLINE infoLn #-}+warnLn :: MonadIO m => LoggerConfig -> Text -> m ()+warnLn lc = liftIO . logLn lc WARN+{-# INLINE warnLn #-}+errorLn :: MonadIO m => LoggerConfig -> Text -> m ()+errorLn lc = liftIO . logLn lc ERROR+{-# INLINE errorLn #-}
+ yam-logger.cabal view
@@ -0,0 +1,42 @@+-- This file has been generated from package.yaml by hpack version 0.28.2.+--+-- see: https://github.com/sol/hpack+--+-- hash: 45f81852e122d34347596136ccfa854fae824e8e71f9cdb2b070b9f2dcc093db++name: yam-logger+version: 0.3.0+synopsis: Yam Logger+description: logger module for yam+category: Project+homepage: https://github.com/leptonyu/yam#readme+bug-reports: https://github.com/leptonyu/yam/issues+maintainer: Daniel YU <leptonyu@gmail.com>+license: MIT+build-type: Simple+cabal-version: >= 1.10+extra-source-files:+ README.md++source-repository head+ type: git+ location: https://github.com/leptonyu/yam++library+ exposed-modules:+ Yam.Logger+ other-modules:+ Paths_yam_logger+ hs-source-dirs:+ src+ default-extensions: AutoDeriveTypeable BangPatterns BinaryLiterals ConstraintKinds DataKinds DefaultSignatures DeriveDataTypeable DeriveFoldable DeriveFunctor DeriveGeneric DeriveTraversable DuplicateRecordFields DoAndIfThenElse EmptyDataDecls ExistentialQuantification FlexibleContexts FlexibleInstances FunctionalDependencies GADTs GeneralizedNewtypeDeriving InstanceSigs KindSignatures LambdaCase MonadFailDesugaring MultiParamTypeClasses MultiWayIf NamedFieldPuns OverloadedStrings PartialTypeSignatures PatternGuards PolyKinds RankNTypes RecordWildCards ScopedTypeVariables StandaloneDeriving TupleSections TypeApplications TypeFamilies TypeOperators TypeSynonymInstances ViewPatterns+ ghc-options: -Wall -Wcompat -Wincomplete-record-updates -Wincomplete-uni-patterns -Wredundant-constraints -fno-warn-orphans+ build-depends:+ aeson+ , base >=4.7 && <5+ , fast-logger+ , monad-logger+ , string-conversions+ , text+ , wai-logger+ default-language: Haskell2010