2011-02-12 30 views
3

我有一個紅寶石控制檯應用程序。當我在我的開發機器上用irb檢查它時,它會記錄好的。但是,當我在VM中運行它時,ruby logger會丟失格式,即它只記錄消息,而沒有日期和嚴重性。現在通過設置格式Logger.formatter = proc { |severity, datetime, progname, msg| ...}來解決這個問題。但我很好奇,爲什麼會發生這種情況?我搜索了一下,發現在Rails應用程序中可能會發生這樣的老信息。這是一個已知的問題?我花了一些時間來調試。紅寶石記錄器丟失格式化

回答

2

您是require不同的gem在不同的環境中,或者它可能是IRB本身設置日誌格式?如果將require 'irb'添加到應用程序會發生什麼情況,這是否也會更改格式?

格式存儲在全局變量中,任何gem都可以覆蓋它。當我require d一個寶石,然後require d ActiveRecord,它設置日誌格式,我一直被類似的問題咬。

它只是表明使用全局變量進行配置有多糟糕,這在Ruby gems中非常常見。

+0

正確的金錢!我''需要'active_support/core_ext',因爲我使用了一些輔助方法,即'classify'和'constantize'。 – 2011-02-12 15:16:30

1

僅供參考在Rails 3中,這已更改,它不再是Class方法,而是實例方法。 這樣它就不會在所有實例和寶石之間共享,不會再影響您的登錄偏好。

這意味着Rails 3中要求該代碼來更改格式爲只記錄器實例:

log = Logger.new('file.log') 
log.formatter = proc { |severity, datetime, progname, msg| ...}