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
, TestActors
, TestFileLogger
-- , TestUniqProtoId
, FakeMessaging
, HasProtocol
@ -222,6 +223,7 @@ test-suite test
, bytestring
, cache
, containers
, directory
, hashable
, microlens-platform
, mtl

View File

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

View File

@ -3,6 +3,7 @@ module Main where
import TestFakeMessaging
import TestActors
import DialogSpec
import TestFileLogger
import Test.Tasty
import Test.Tasty.HUnit
@ -14,6 +15,7 @@ main =
[
testCase "testFakeMessaging1" testFakeMessaging1
, testCase "testActorsBasic" testActorsBasic
, testCase "testFileLogger" testFileLogger
, 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