我已经配置了这样的日志记录:
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
等。
答案 0 :(得分:3)
我在你的程序中发现了错误。实际上,它出现在你的第一个代码中,我对它没有给予足够的重视:(
您只需将记录器名称替换为
中的rootLoggerName即可updateGlobalLogger "Linker"
到
updateGlobalLogger rootLoggerName
这对我有用。我不知道当你没有使用root logger进行初始化时会发生什么,但现在它至少会起作用。
此外,如果您正在使用stack
并且不介意使用github
项目,那么您可能希望考虑使用我们的日志库(它目前不在hackage上),这是一个包装器hslogger
增加了一些果汁(如彩色记录器名称等):