log 0.1.1 → 0.2.0
raw patch · 7 files changed
+16/−5 lines, 7 files
Files
- log.cabal +1/−1
- src/Log/Backend/PostgreSQL.hs +2/−1
- src/Log/Backend/StandardOutput.hs +1/−1
- src/Log/Class.hs +3/−2
- src/Log/Class/Instances.hs +1/−0
- src/Log/Data.hs +3/−0
- src/Log/Monad.hs +5/−0
log.cabal view
@@ -1,5 +1,5 @@ name: log-version: 0.1.1+version: 0.2.0 synopsis: Structured logging solution with multiple backends description: A library that provides a way to record structured log messages with multiple backends.
src/Log/Backend/PostgreSQL.hs view
@@ -19,7 +19,7 @@ pgLogger cs = mkBulkLogger "PostgreSQL" $ mapM_ serialize . chunksOf 1000 where serialize :: [LogMessage] -> IO ()- serialize msgs = runDBT cs ts (runSQL_ $ "INSERT INTO logs (insertion_time, insertion_order, time, level, component, message, data) VALUES" <+> mintercalate ", " (map sqlifyMessage $ zip [1..] msgs)) `catches` [+ serialize msgs = runDBT cs ts (runSQL_ $ "INSERT INTO logs (insertion_time, insertion_order, time, level, component, domain, message, data) VALUES" <+> mintercalate ", " (map sqlifyMessage $ zip [1..] msgs)) `catches` [ Handler $ \(e::AsyncException) -> throwIO e , Handler $ \(e::SomeException) -> do putStrLn $ "PostgreSQL: couldn't serialize logs: " ++ show e ++ ", retrying in 10 seconds"@@ -35,6 +35,7 @@ , "," <?> lmTime , "," <?> sqlifyLevel lmLevel , "," <?> lmComponent+ , "," <?> Array1 lmDomain , "," <?> lmMessage , "," <?> toStrict (encode lmData) <> "::jsonb" , ")"
src/Log/Backend/StandardOutput.hs view
@@ -25,7 +25,7 @@ , " " , textifyLevel lmLevel , " "- , lmComponent+ , T.intercalate "/" $ lmComponent : lmDomain , ": " , lmMessage ] ++ if lmData == emptyObject
src/Log/Class.hs view
@@ -22,8 +22,9 @@ -- | Represents the family of monads with logging capabilities. class MonadTime m => MonadLog m where- logMessage :: UTCTime -> LogLevel -> T.Text -> Value -> m ()- localData :: [Pair] -> m a -> m a+ logMessage :: UTCTime -> LogLevel -> T.Text -> Value -> m ()+ localData :: [Pair] -> m a -> m a+ localDomain :: T.Text -> m a -> m a ----------------------------------------
src/Log/Class/Instances.hs view
@@ -16,6 +16,7 @@ ) => MonadLog (t m) where logMessage time level message = lift . logMessage time level message localData data_ m = controlT $ \run -> localData data_ (run m)+ localDomain domain m = controlT $ \run -> localDomain domain (run m) controlT :: (MonadTransControl t, Monad (t m), Monad m) => (Run t -> m (StT t a)) -> t m a
src/Log/Data.hs view
@@ -20,6 +20,8 @@ data LogMessage = LogMessage { -- | Component of an application. lmComponent :: !Text+ -- | Aplication log domain.+, lmDomain :: ![Text] -- | Time of log. , lmTime :: !UTCTime -- | Log level.@@ -32,6 +34,7 @@ instance NFData LogMessage where rnf LogMessage{..} = rnf lmComponent+ `seq` rnf lmDomain `seq` rnf lmTime `seq` rnf lmLevel `seq` rnf lmMessage
src/Log/Monad.hs view
@@ -30,6 +30,7 @@ data LoggerEnv = LoggerEnv { leLogger :: !Logger , leComponent :: !Text+, leDomain :: ![Text] , leData :: ![Pair] } @@ -43,6 +44,7 @@ runLogT component logger m = runReaderT (unLogT m) LoggerEnv { leLogger = logger , leComponent = component+, leDomain = [] , leData = [] } @@ -83,6 +85,7 @@ where lm = LogMessage { lmComponent = leComponent+ , lmDomain = leDomain , lmTime = time , lmLevel = level , lmMessage = message@@ -93,3 +96,5 @@ } localData data_ = LogT . local (\e -> e { leData = data_ ++ leData e }) . unLogT++ localDomain domain = LogT . local (\e -> e { leDomain = leDomain e ++ [domain] }) . unLogT