@@ -941,19 +941,29 @@ logItem
941941 -> m ()
942942logItem a ns loc sev msg = do
943943 LogEnv{..} <- getLogEnv
944− liftIO $ do
945− item <- Item
946− <$> pure _logEnvApp
947− <*> pure _logEnvEnv
948− <*> pure sev
949− <*> (mkThreadIdText <$> myThreadId)
950− <*> pure _logEnvHost
951− <*> pure _logEnvPid
952− <*> pure a
953− <*> pure msg
954− <*> _logEnvTimer
955− <*> pure (_logEnvApp <> ns)
956− <*> pure loc
944+ logKatipItem =<< liftIO
945+ (Item <$> pure _logEnvApp
946+ <*> pure _logEnvEnv
947+ <*> pure sev
948+ <*> (mkThreadIdText <$> myThreadId)
949+ <*> pure _logEnvHost
950+ <*> pure _logEnvPid
951+ <*> pure a
952+ <*> pure msg
953+ <*> _logEnvTimer
954+ <*> pure (_logEnvApp <> ns)
955+ <*> pure loc)
956+
957+-- | Log already constructed 'Item'. This is the lowest level function that other log*
958+-- functions use.
959+-- It can be useful when implementing centralised logging services.
960+logKatipItem
961+ :: (A.Applicative m, LogItem a, Katip m)
962+ => Item a
963+ -> m ()
964+logKatipItem item = do
965+ LogEnv{..} <- getLogEnv
966+ liftIO $
957967 FT.forM_ (M.elems _logEnvScribes) $ \ ScribeHandle {..} -> do
958968 whenM (scribePermitItem shScribe item) $
959969 void $ atomically (tryWriteTBQueue shChan (NewItem item))