ruby-on-rails - Rails4 中的自定义记录器?

标签 ruby-on-rails logging

看起来 Rails4 的记录器与 Rails3 不同,最终支持自定义格式化程序,就像 ruby​​ stdlib 记录器一样。

Rails.logger.formatter  # => #<ActiveSupport::Logger::SimpleFormatter:0x007ff81757d890 @datetime_format=nil>
Rails.logger.formatter = SomeFormatterClass

但是,当我尝试为其提供一个足以满足 stdlib Logger 格式化程序的格式化程序类时:

[2014-03-12 16:23:27] ERROR NoMethodError: undefined method `tagged' for #<FormattedRailsLoggerFormatter:0x007fd816545ad8>
/Users/jrochkind/.gem/ruby/1.9.3/gems/activesupport-4.0.3/lib/active_support/tagged_logging.rb:67:in `tagged'
/Users/jrochkind/.gem/ruby/1.9.3/gems/railties-4.0.3/lib/rails/rack/logger.rb:20:in `call'

有谁知道,自定义格式化程序实际上是 Rails4 支持的功能吗?您应该如何在任何地方记录它?

最佳答案

回答我自己的问题,我已经弄清楚了。

Rails4 提供了一个配置变量,config.log_formatter。您可能会将其与其他应用程序配置一起设置在 config/application.rb 中。

您应该将其设置为实现 stdlib Logger Formatter 接口(interface)的对象:基本上,您必须提供一个方法 call(severity, time, progname, msg) 来返回格式化的日志行。

请注意,您将其设置为对象,而不是类名,例如:

config.log_formatter = MyFormatter.new

您不应该尝试直接设置 Rails.logger.formatter —— Rails 希望您通过配置来设置它,并在您设置时执行一些棘手的操作以使格式化程序和记录器能够与 Rails 正常工作。使用配置。您可以看到,并且在Rails source code here中确实使用了config.log_formatter。 。 (感谢 github,它提供了很棒的代码搜索和显示 ui,这就是我如何追踪并找出 config.log_formatter 存在的方式)

在 Rails4 中,您应该不需要需要对 Rails 的任何部分进行猴子修补只是为了使用自定义日志格式化程序,只需使用 config.log_formatter 即可。 (在 Rails3 中,您确实需要对其中一个或另一个进行猴子修补才能获得自定义日志格式)。

关于ruby-on-rails - Rails4 中的自定义记录器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22363198/

相关文章:

ruby-on-rails - Rspec 响应测试应该成功失败

Tomcat 应该记录 WARNING/SEVERE 但也记录 INFO

java - slf4j 日志记录 - 两种错误日志记录方法之间的差异(带和不带 Throwable)

ruby-on-rails - 如何在 Ruby on Rails 中使用 'Ajax Upload'?

ruby-on-rails - Resque 不运行 worker 从队列中选择工作 - Rails

ruby-on-rails - 无法打开与本地主机 :9200 - Rails on Docker 的 TCP 连接

ruby-on-rails - Assets 管道找不到 JS 文件

php - 如何使用 PHP 中的 log() 获取曲线上的点?

php - 如何在浏览器中在线查看PHP或Apache错误日志?

asp.net-mvc - 登录 MVC3 中的 Razor View