hslogger&重复日志行

时间:2016-12-05 20:28:40

标签: haskell

我已经配置了这样的日志记录:

import System.Environment
import System.Log.Logger
import System.Log.Handler (setFormatter)
import System.Log.Handler.Simple (streamHandler)
import System.Log.Formatter
import System.IO (getLine, stdout)
main = do
stdOutHandler <- streamHandler stdout DEBUG >>= \lh -> return $
            setFormatter lh (simpleLogFormatter "[$time : $loggername : $prio] $msg")
  updateGlobalLogger "Linker" (setLevel DEBUG . setHandlers [stdOutHandler])
  infoM "Linker" "Hello world!"

不幸的是,每次我使用infoM(或任何记录功能)时,我都会遇到重复的行,例如

infoM "Linker" "hi there"

产生

hi there
[2016-12-05 20:23:10 GMT : Linker : INFO] hi there

我认为setHandlers首先删除了其他处理程序。

我只想要格式化的行,而不是&#34; normal&#34;格式化ala putStrLn等。

1 个答案:

答案 0 :(得分:3)

我在你的程序中发现了错误。实际上,它出现在你的第一个代码中,我对它没有给予足够的重视:(

您只需将记录器名称替换为

中的rootLoggerName即可
updateGlobalLogger "Linker"

updateGlobalLogger rootLoggerName

这对我有用。我不知道当你没有使用root logger进行初始化时会发生什么,但现在它至少会起作用。

此外,如果您正在使用stack并且不介意使用github项目,那么您可能希望考虑使用我们的日志库(它目前不在hackage上),这是一个包装器hslogger增加了一些果汁(如彩色记录器名称等):

https://github.com/serokell/log-warper

Colored logging