我愿意使用快速记录器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
(的任何值组合在一起。根据您的要求,您可能需要不同的格式,例如在输出中包含日志级别。