我有一个ruby控制台应用程序。当我在我的开发机器上用irb检查它时,它会正常记录。但是当我在VM中运行它时,ruby logger会丢失格式化,即它只记录消息,没有日期和严重性。现在,通过使用Logger.formatter = proc { |severity, datetime, progname, msg| ...}
设置格式来解决此问题。但我很好奇为什么会发生这种情况?我用谷歌搜索并找到了相当古老的信息,这可能发生在Rails应用程序中。这是一个已知的问题?我花了一些时间来调试它。
答案 0 :(得分:2)
您是require
在不同环境中使用不同的宝石,还是设置日志格式的IRB本身?如果您向应用程序添加require 'irb'
会发生什么情况,是否也会更改格式?
格式化存储在全局变量中,任何gem都可以覆盖它。当我require
一个宝石反过来require
d ActiveRecord,它设置了日志格式时,我被一个类似的问题所困扰。
它只是显示了使用全局变量进行配置有多糟糕,这在Ruby gems中太常见了。
答案 1 :(得分:1)
在Rails 3中的FYI,这已经改变了,它不再是一个Class方法,而是一个实例方法。 因此,它不会在所有实例和宝石之间共享,不应再干扰您的登录首选项。
这意味着Rails 3需要此代码才能更改仅记录器实例的格式:
log = Logger.new('file.log')
log.formatter = proc { |severity, datetime, progname, msg| ...}