看起来 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/