Add file logger

This commit is contained in:
Vladimir Krutkin 2023-10-12 12:54:56 +03:00
parent c829a6d37c
commit e411e29246
4 changed files with 36 additions and 0 deletions

View File

@ -206,6 +206,7 @@ test-suite test
other-modules: TestFakeMessaging other-modules: TestFakeMessaging
, TestActors , TestActors
, TestFileLogger
-- , TestUniqProtoId -- , TestUniqProtoId
, FakeMessaging , FakeMessaging
, HasProtocol , HasProtocol
@ -222,6 +223,7 @@ test-suite test
, bytestring , bytestring
, cache , cache
, containers , containers
, directory
, hashable , hashable
, microlens-platform , microlens-platform
, mtl , mtl

View File

@ -17,6 +17,7 @@ module HBS2.System.Logger.Simple
, loggerTr , loggerTr
, toStderr , toStderr
, toStdout , toStdout
, toFile
, logPrefix , logPrefix
, SetLoggerEntry , SetLoggerEntry
, module HBS2.System.Logger.Simple.Class , module HBS2.System.Logger.Simple.Class
@ -39,6 +40,7 @@ import Lens.Micro.Platform
data LoggerType = LoggerStdout data LoggerType = LoggerStdout
| LoggerStderr | LoggerStderr
| LoggerFile FilePath
| LoggerNull | LoggerNull
data LoggerEntry = data LoggerEntry =
@ -78,6 +80,9 @@ toStderr = set loggerType LoggerStderr
toStdout :: SetLoggerEntry toStdout :: SetLoggerEntry
toStdout = set loggerType LoggerStdout toStdout = set loggerType LoggerStdout
toFile :: FilePath -> SetLoggerEntry
toFile filePath = set loggerType (LoggerFile filePath)
setLogging :: forall a m . (MonadIO m, HasLogLevel a) setLogging :: forall a m . (MonadIO m, HasLogLevel a)
=> (LoggerEntry -> LoggerEntry) => (LoggerEntry -> LoggerEntry)
-> m () -> m ()
@ -104,6 +109,10 @@ setLogging f = do
se <- liftIO $ newStdoutLoggerSet 10000 -- FIXME: ?? se <- liftIO $ newStdoutLoggerSet 10000 -- FIXME: ??
pure $ set loggerSet se e pure $ set loggerSet se e
LoggerFile filePath-> do
delLogger (Just e)
se <- liftIO $ newFileLoggerSet 10000 filePath -- FIXME: ??
pure $ set loggerSet se e
setLoggingOff :: forall a m . (MonadIO m, HasLogLevel a) => m () setLoggingOff :: forall a m . (MonadIO m, HasLogLevel a) => m ()
setLoggingOff = do setLoggingOff = do

View File

@ -3,6 +3,7 @@ module Main where
import TestFakeMessaging import TestFakeMessaging
import TestActors import TestActors
import DialogSpec import DialogSpec
import TestFileLogger
import Test.Tasty import Test.Tasty
import Test.Tasty.HUnit import Test.Tasty.HUnit
@ -14,6 +15,7 @@ main =
[ [
testCase "testFakeMessaging1" testFakeMessaging1 testCase "testFakeMessaging1" testFakeMessaging1
, testCase "testActorsBasic" testActorsBasic , testCase "testActorsBasic" testActorsBasic
, testCase "testFileLogger" testFileLogger
, testDialog , testDialog
] ]

View File

@ -0,0 +1,23 @@
module TestFileLogger where
import HBS2.System.Logger.Simple
import System.Directory
import Test.Tasty.HUnit
logFile :: FilePath
logFile = "/tmp/testFileLogger.log"
debugPrefix :: SetLoggerEntry
debugPrefix = toFile logFile . logPrefix "[debug] "
testFileLogger :: IO ()
testFileLogger = do
let msg = "Oh hi Mark"
setLogging @DEBUG debugPrefix
debug msg
setLoggingOff @DEBUG
fileContent <- readFile logFile
assertEqual "write == read" fileContent ("[debug] " <> msg <> "\n")
removeFile logFile