2011-02-10 91 views
4

我想在命令行應用程序中使用Ruby的記錄器;它跳動了puts,並且具有很好的記錄事物的靈活性。使用Ruby的記錄器有錯誤轉到標準錯誤,但其他消息到文件/標準輸出?

我希望的一件事是能夠將錯誤/致命消息轉到標準錯誤(如慣例)另外將記錄器消息配置到的位置。我做這個

logger = Logger.new(some_file) 

logger.debug("This goes to some_file, if debug is set") 
logger.info("This goes to some_file, if info is set") 
logger.error("This goes to some_file, AND stderr") 

一種方式是破解formatter

logger.formatter = Proc.new do |severity,time,progname,msg| 
    message = format_message(severity,time,progname,msg) 
    if severity == ERROR 
    $stderr.puts message 
    end 
    message 
end 

這似乎哈克。另一種方法可能是創建一個Logger,它將其調用代理到底層的實際記錄器,但攔截錯誤消息。

任何人都這樣做了,是否有可能已經有這樣做?

回答

4

任何人都這樣做了,有沒有人可以做到這一點?

紅寶石很酷,靈活,功能強大,而且東西。只是這些猴子打補丁的東西,才能打開一個類,並添加方法,它太容易忘記老式繼承...

class CopyLogger < Logger 
    def error message 
    # Print to standard error... 
    $stderr.puts message 
    # ...*and* to wherever you specified as well 
    super message 
    end 
end 

logger = CopyLogger.new(some_file) 
# ... 

你可以把額外的參數到您的新類的構造函數,例如作爲發球消息的期望的嚴重性等。

0

我通常是tail開發時要監視的日誌文件和put定製的,用戶友好的信息給大衆。