如果你看看the source for the function,你會看到清理操作是致電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
)它目前有。根據您的要求,您可能需要不同的格式,可能包括輸出中的日誌級別。
你誤會了'(A - > B) - > IO()'的含義。這不需要「A」類型的值;它需要「A - > B」類型的值。通過提供「A - > B」類型的函數,您可以訪問「A」類型的值,但只能在該函數的範圍內。換句話說,'TimedFastLogger'爲你提供'FormattedTime',而不是其他方式。 – user2407038
我真的不明白爲什麼'TimedFastLogger'是這樣定義的 – user3927886
您如何期待它被定義?或者你認爲實際定義有什麼錯誤?這似乎是一種很自然的方式來爲我定義它。 – user2407038