@@ -18,6 +18,7 @@ import Control.AutoUpdate (UpdateSettings (..), defaultUpdateSettings,
1818import Control.Concurrent.MVar (modifyMVar_ )
1919
2020import Data.Aeson.Text (encodeToLazyText )
21+ import qualified Data.HashMap.Strict as HM
2122import Data.Text.Lazy.Builder
2223import qualified Data.Text.Lazy.IO as TIO
2324import Data.Time (diffUTCTime )
@@ -26,17 +27,20 @@ import Katip.Format.Time (formatAsIso8601)
2627import Katip.Scribes.Handle (brackets , getKeys )
2728
2829import qualified Pos.Util.Log.Internal as Internal
29- import Pos.Util.Log.LoggerConfig (RotationParameters (.. ))
30+ import Pos.Util.Log.LoggerConfig (NamedSeverity ,
31+ RotationParameters (.. ))
32+ import Pos.Util.Log.LoggerName (LoggerName )
3033import Pos.Util.Log.Rotator (cleanupRotator , evalRotator ,
3134 initializeRotator )
35+ import qualified Pos.Util.Log.Severity as Log (Severity (.. ))
3236
3337import System.IO (BufferMode (LineBuffering ), Handle ,
3438 IOMode (WriteMode ), hClose , hSetBuffering , stderr , stdout )
3539
3640-- | create a katip scribe for logging to a file in JSON representation
37- mkJsonFileScribe :: RotationParameters -> Internal. FileDescription -> Severity -> Verbosity -> IO Scribe
38- mkJsonFileScribe rot fdesc s v = do
39- mkFileScribe rot fdesc formatter False s v
41+ mkJsonFileScribe :: RotationParameters -> NamedSeverity -> Internal. FileDescription -> Log. Severity -> Verbosity -> IO Scribe
42+ mkJsonFileScribe rot sevfilter fdesc s v = do
43+ mkFileScribe rot sevfilter fdesc formatter False s v
4044 where
4145 formatter :: LogItem a => Handle -> Bool -> Verbosity -> Item a -> IO Int
4246 formatter hdl _ v' item = do
@@ -45,9 +49,9 @@ mkJsonFileScribe rot fdesc s v = do
4549 return $ length tmsg
4650
4751-- | create a katip scribe for logging to a file in textual representation
48- mkTextFileScribe :: RotationParameters -> Internal. FileDescription -> Bool -> Severity -> Verbosity -> IO Scribe
49- mkTextFileScribe rot fdesc colorize s v = do
50- mkFileScribe rot fdesc formatter colorize s v
52+ mkTextFileScribe :: RotationParameters -> NamedSeverity -> Internal. FileDescription -> Bool -> Log. Severity -> Verbosity -> IO Scribe
53+ mkTextFileScribe rot sevfilter fdesc colorize s v = do
54+ mkFileScribe rot sevfilter fdesc formatter colorize s v
5155 where
5256 formatter :: LogItem a => Handle -> Bool -> Verbosity -> Item a -> IO Int
5357 formatter hdl colorize' v' item = do
@@ -59,12 +63,13 @@ mkTextFileScribe rot fdesc colorize s v = do
5963-- and handle file rotation within the katip-invoked logging function
6064mkFileScribe
6165 :: RotationParameters
66+ -> NamedSeverity
6267 -> Internal. FileDescription
6368 -> (forall a . LogItem a => Handle -> Bool -> Verbosity -> Item a -> IO Int ) -- format and output function, returns written bytes
6469 -> Bool -- whether the output is colourized
65- -> Severity -> Verbosity
70+ -> Log. Severity -> Verbosity
6671 -> IO Scribe
67- mkFileScribe rot fdesc formatter colorize s v = do
72+ mkFileScribe rot sevfilter fdesc formatter colorize s v = do
6873 trp <- initializeRotator rot fdesc
6974 scribestate <- newMVar trp -- triple of (handle), (bytes remaining), (rotate time)
7075 -- sporadically remove old log files - every 10 seconds
@@ -76,7 +81,7 @@ mkFileScribe rot fdesc formatter colorize s v = do
7681 return (hdl, b, t)
7782 let logger :: forall a . LogItem a => Item a -> IO ()
7883 logger item =
79- when (permitItem s item) $
84+ when (checkItem s sevfilter item) $
8085 modifyMVar_ scribestate $ \ (hdl, bytes, rottime) -> do
8186 byteswritten <- formatter hdl colorize v item
8287 -- remove old files
@@ -96,36 +101,45 @@ mkFileScribe rot fdesc formatter colorize s v = do
96101 return $ Scribe logger finalizer
97102
98103-- | create a katip scribe for logging to a file
99- mkFileScribeH :: Handle -> Bool -> Severity -> Verbosity -> IO Scribe
100- mkFileScribeH h colorize s v = do
104+ mkFileScribeH :: Handle -> Bool -> NamedSeverity -> Log. Severity -> Verbosity -> IO Scribe
105+ mkFileScribeH h colorize sevfilter s v = do
101106 hSetBuffering h LineBuffering
102107 locklocal <- newMVar ()
103108 let logger :: forall a . LogItem a => Item a -> IO ()
104- logger item = when (permitItem s item) $
109+ logger item = when (checkItem s sevfilter item) $
105110 bracket_ (takeMVar locklocal) (putMVar locklocal () ) $
106111 TIO. hPutStrLn h $! toLazyText $ formatItem colorize v item
107112 pure $ Scribe logger (hClose h)
108113
109114-- | create a katip scribe for logging to the console
110- mkStdoutScribe :: Severity -> Verbosity -> IO Scribe
115+ mkStdoutScribe :: NamedSeverity -> Log. Severity -> Verbosity -> IO Scribe
111116mkStdoutScribe = mkFileScribeH stdout True
112117
113118-- | create a katip scribe for logging to stderr
114- mkStderrScribe :: Severity -> Verbosity -> IO Scribe
119+ mkStderrScribe :: NamedSeverity -> Log. Severity -> Verbosity -> IO Scribe
115120mkStderrScribe = mkFileScribeH stderr True
116121
117122-- | @Scribe@ that outputs to '/dev/null' without locking
118- mkDevNullScribe :: Internal. LoggingHandler -> Severity -> Verbosity -> IO Scribe
119- mkDevNullScribe lh s v = do
123+ mkDevNullScribe :: Internal. LoggingHandler -> NamedSeverity -> Log. Severity -> Verbosity -> IO Scribe
124+ mkDevNullScribe lh sevfilter s v = do
120125 h <- openFile " /dev/null" WriteMode
121126 let colorize = False
122127 hSetBuffering h LineBuffering
123128 let logger :: forall a . LogItem a => Item a -> IO ()
124- logger item = when (permitItem s item) $
129+ logger item = when (checkItem s sevfilter item) $
125130 Internal. incrementLinesLogged lh
126131 >> (TIO. hPutStrLn h $! toLazyText $ formatItem colorize v item)
127132 pure $ Scribe logger (hClose h)
128133
134+ -- | check if item passes severity filter
135+ checkItem :: Log. Severity -> NamedSeverity -> Item a -> Bool
136+ checkItem s sevfilter item@ Item {.. } =
137+ permitItem (Internal. sev2klog severity) item
138+ where
139+ severity :: Log. Severity
140+ severity = fromMaybe s $ HM. lookup namedcontext sevfilter
141+ namedcontext :: LoggerName
142+ namedcontext = mconcat $ intercalateNs _itemNamespace
129143
130144-- | format a @LogItem@ with subsecond precision (ISO 8601)
131145formatItem :: LogItem a => Bool -> Verbosity -> Item a -> Builder
0 commit comments