【发布时间】:2015-03-05 13:24:50
【问题描述】:
在 GHCi REPL 中运行时,我对 hslogger 的实现感到恼火。
import System.IO (Handle)
import System.Log.Logger (Priority( DEBUG ), updateGlobalLogger, addHandler, setLevel, debugM)
import System.Log.Handler.Simple (fileHandler)
import System.Log.Handler (setFormatter, close)
main :: IO ()
main = do
f <- fileHandler "sample.log" DEBUG
updateGlobalLogger "Component" (addHandler f)
updateGlobalLogger "Component" (setLevel DEBUG)
debugM "Component" "This is a sample log line"
close f
它第一次无异常运行,但是,在随后的 main 执行中:
*** Exception: sample.log: hPutStr: illegal operation (handle is closed)
当我在 GHCi 之外运行程序时没有遇到这种情况。
是我没有用 hslogger 正确关闭文件句柄,还是 GHCi 保持文件句柄打开?
我在打开和关闭标准文件时没有遇到同样的问题。
import System.IO (Handle, openFile, hClose, hPutStrLn, IOMode (WriteMode))
main :: IO ()
main = do
f <- openFile "sampleFile.log" WriteMode
hPutStrLn f "Hello"
hClose f
【问题讨论】:
标签: haskell logging io ghci filehandle