on master help sign in
Lensify Item, combinator for verbosity restriction
commitffc242859c102e36a0657cbe418875c7f6c308c1 authorOzgun Ataman <ozgun.ataman@soostone.com> dateWed 4 Mar 2015, 14:33 (12 years ago) parent7d12bc3
3 files changed+44−35
katip-elasticsearch/src/Katip/Scribes/ElasticSearch.hs+2−1 katip/src/Katip/Core.hs+31−23 katip/src/Katip/Scribes/Handle.hs+11−11
katip-elasticsearch/src/Katip/Scribes/ElasticSearch.hs+2−1
@@ -21,7 +21,8 @@ mkEsScribe
2121 -> IO Scribe
2222mkEsScribe server ix mapping sev verb = return $ Scribe $ \ i -> do
2323 did <- mkDocId
24− void $ indexDocument server ix mapping i did
24+ when (_itemSeverity i >= sev) $
25+ void $ indexDocument server ix mapping (itemJson verb i) did
2526
2627
2728-------------------------------------------------------------------------------
katip/src/Katip/Core.hs+31−23
@@ -143,34 +143,34 @@ showLS = ls . show
143143-------------------------------------------------------------------------------
144144-- | This has everything each log message will contain.
145145data Item a = Item {
146− itemApp :: Namespace
147− , itemEnv :: Environment
148− , itemSeverity :: Severity
149− , itemThread :: ThreadId
150− , itemHost :: HostName
151− , itemProcess :: ProcessID
152− , itemPayload :: a
153− , itemMessage :: LogStr
154− , itemTime :: UTCTime
155− , itemNamespace :: Namespace
156− , itemLoc :: Maybe Loc
146+ _itemApp :: Namespace
147+ , _itemEnv :: Environment
148+ , _itemSeverity :: Severity
149+ , _itemThread :: ThreadId
150+ , _itemHost :: HostName
151+ , _itemProcess :: ProcessID
152+ , _itemPayload :: a
153+ , _itemMessage :: LogStr
154+ , _itemTime :: UTCTime
155+ , _itemNamespace :: Namespace
156+ , _itemLoc :: Maybe Loc
157157 } deriving (Generic)
158−
158+makeLenses ''Item
159159
160160
161161instance ToJSON a => ToJSON (Item a) where
162162 toJSON Item{..} = A.object
163− [ "app" A..= itemApp
164− , "env" A..= itemEnv
165− , "sev" A..= itemSeverity
166− , "thread" A..= show itemThread
167− , "host" A..= itemHost
168− , "pid" A..= A.String (toS (show itemProcess))
169− , "data" A..= itemPayload
170− , "msg" A..= (B.toLazyText $ unLogStr itemMessage)
171− , "at" A..= itemTime
172− , "ns" A..= itemNamespace
173− , "loc" A..= fmap LocJs itemLoc
163+ [ "app" A..= _itemApp
164+ , "env" A..= _itemEnv
165+ , "sev" A..= _itemSeverity
166+ , "thread" A..= show _itemThread
167+ , "host" A..= _itemHost
168+ , "pid" A..= A.String (toS (show _itemProcess))
169+ , "data" A..= _itemPayload
170+ , "msg" A..= (B.toLazyText $ unLogStr _itemMessage)
171+ , "at" A..= _itemTime
172+ , "ns" A..= _itemNamespace
173+ , "loc" A..= fmap LocJs _itemLoc
174174 ]
175175
176176newtype LocJs = LocJs { getLocJs :: Loc }
@@ -224,6 +224,14 @@ payloadJson verb a = case foldMap (flip payloadKeys a) [(V0)..verb] of
224224 & _Object %~ HM.filterWithKey (\ k _ -> k `elem` ks)
225225
226226
227+-------------------------------------------------------------------------------
228+-- | Convert log item to its JSON representation while trimming its
229+-- payload based on the desired verbosity. Backends that push JSON
230+-- messages should use this to obtain their payload.
231+itemJson :: LogContext a => Verbosity -> Item a -> A.Value
232+itemJson verb a = toJSON $ a & itemPayload %~ payloadJson verb
233+
234+
227235-------------------------------------------------------------------------------
228236-- | Scribes are handlers of incoming items. Each registered scribe
229237-- knows how to push a log item somewhere.
katip/src/Katip/Scribes/Handle.hs+11−11
@@ -26,7 +26,7 @@ brackets m = fromText "[" <> m <> fromText "]"
2626
2727-------------------------------------------------------------------------------
2828getKeys :: LogContext s => Verbosity -> s -> [Builder]
29−getKeys verb a = payloadJson verb a ^..
29+getKeys verb a = payloadJson verb a ^..
3030 _Object . to HM.toList . traverse . to rendPair
3131 where
3232 rendPair (k,v) = fromText k <> fromText ":" <> (v ^. _Primitive . to renderPrim)
@@ -56,7 +56,7 @@ mkHandleScribe cs h sev verb = do
5656 ColorIfTerminal -> hIsTerminalDevice h
5757 ColorLog b -> return b
5858 return $ Scribe $ \ i@Item{..} -> do
59− when (itemSeverity >= sev) $
59+ when (_itemSeverity >= sev) $
6060 T.hPutStrLn h $ toLazyText $ formatItem colorize verb i
6161
6262
@@ -64,17 +64,17 @@ mkHandleScribe cs h sev verb = do
6464formatItem :: LogContext a => Bool -> Verbosity -> Item a -> Builder
6565formatItem withColor verb Item{..} =
6666 brackets nowStr <>
67− brackets (mconcat $ map fromText $ intercalateNs itemNamespace) <>
68− brackets (fromText (renderSeverity' itemSeverity)) <>
69− brackets (fromString itemHost) <>
70− brackets (fromString (show itemProcess)) <>
71− brackets (fromString (show itemThread)) <>
67+ brackets (mconcat $ map fromText $ intercalateNs _itemNamespace) <>
68+ brackets (fromText (renderSeverity' _itemSeverity)) <>
69+ brackets (fromString _itemHost) <>
70+ brackets (fromString (show _itemProcess)) <>
71+ brackets (fromString (show _itemThread)) <>
7272 mconcat ks <>
73− maybe mempty (brackets . fromString . locationToString) itemLoc <>
74− fromText " " <> (unLogStr itemMessage)
73+ maybe mempty (brackets . fromString . locationToString) _itemLoc <>
74+ fromText " " <> (unLogStr _itemMessage)
7575 where
76− nowStr = fromString $ formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" itemTime
77− ks = map brackets $ getKeys verb itemPayload
76+ nowStr = fromString $ formatTime defaultTimeLocale "%Y-%m-%d %H:%M:%S" _itemTime
77+ ks = map brackets $ getKeys verb _itemPayload
7878 renderSeverity' s = case s of
7979 EmergencyS -> red $ renderSeverity s
8080 AlertS -> red $ renderSeverity s