快速记录器清理操作(哈斯克尔)



我愿意使用快速记录器Haskell库,但我有一些问题:

函数newTimedFastLogger解释为:

初始化一个 FastLogger,并将时间戳附加到每条消息。 返回记录器和清理操作的元组。

那么,第一个问题,这个"清理行动"是为了什么?

此外,该函数将IO FormattedTime作为第一个参数,但随后我们有:

type TimedFastLogger = (FormattedTime -> LogStr) -> IO ()

这是我的第二个问题,为什么在创建TimedFastLogger和使用它时都必须提供格式化时间?

如果您查看函数的源代码,您会发现清理操作是对rmLoggerSet的调用。该文档说:

刷新缓冲区,关闭内部文件信息并释放缓冲区。

所以这应该回答你的第一个问题。当您不再需要记录器以确保与之关联的任何状态状态都已"清理"时,您将运行它。它可能会根据您使用的记录器类型执行不同操作。

对于第二个问题IO FormattedTime是记录器在需要日志消息时间戳时可以调用的操作。所以它可能会多次调用它并获得不同的FormattedTime.调用newTimedFastLogger时,将此操作作为第一个参数传递,并返回记录器和清理操作。因此,使用它会像这样:

import System.Log.FastLogger
import Data.Monoid ((<>))
main :: IO ()
main = do
timeCache <- newTimeCache simpleTimeFormat
(logger, cleanUp) <- newTimedFastLogger timeCache (LogStdout defaultBufSize)
log logger "Some log message"
cleanUp
log :: ToLogStr msg => TimedFastLogger -> msg -> IO ()
log logger msg = logger $ ft -> toLogStr ft <> toLogStr ": " <> toLogStr msg

每次记录消息时,您都在调用logger,并传入一个回调,告诉它如何将您的消息与当前具有的时间(ft(的任何值组合在一起。根据您的要求,您可能需要不同的格式,例如在输出中包含日志级别。

最新更新