【问题标题】:Formatting of Rails logs when using ActiveRecord使用 ActiveRecord 时 Rails 日志的格式
【发布时间】:2012-08-20 16:18:06
【问题描述】:

所以我有一个之前不需要 ActiveRecord 的应用程序 - 因此我们从应用程序中删除了 ActiveRecord 并将我们的日志记录格式化为:

在 application.rb 中:

class DreamLogFormatter < Logger::Formatter
  SEVERITY_TO_COLOR_MAP   = {'DEBUG'=>'32', 'INFO'=>'0;37', 'WARN'=>'35', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}

  def call(severity, time, progname, msg)
    color = SEVERITY_TO_COLOR_MAP[severity]
    "\033[0;37m[%s] \033[#{color}m%5s - %s\033[0m\n" % [time.to_s(:short), severity, msg2str(msg)]
  end
end

class ActiveSupport::BufferedLogger
  def formatter=(formatter)
    @log.formatter = formatter
  end
end

开发中.rb

config.logger = Logger.new("log/#{Rails.env}.log")
config.logger.formatter = DreamLogFormatter.new
ActiveResource::Base.logger =  Logger.new("log/#{Rails.env}.log")
ActiveResource::Base.logger.formatter = DreamLogFormatter.new

注意:添加了 ActiveResource 记录器配置,因为我们希望我们的 ActiveResource 调用的 URL 输出如下所示:

GET http://localhost:2524/users/
 --> 200 OK 239 (13.0ms)

使用此配置进行日志记录为我们提供了 ActiveResource 调用和我们自己使用 Rails.logger 的日志记录的良好输出组合。

但是,我们需要将 ActiveRecord 添加回我们的应用程序,因为我们需要将会话存储从 cookie 存储更改为 ActiveRecord 存储。并且自从重新添加 ActiveRecord 后,日志记录不再正常工作。

以前的日志输出:

Started GET "/audit/?key1=value1&key2=value2" for 0:0:0:0:0:0:0:1%0 at 2012-08-15 15:39:58 -0400
[15 Aug 15:39]  INFO -   Processing by AuditController#index as HTML
[15 Aug 15:39]  INFO -   Parameters: {"utf8"=>"✓", "key1"=>"value1", "key2"=>"value2"}
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[15 Aug 15:39]  INFO - --> 200 OK 151 (55.0ms)
[15 Aug 15:39]  WARN - There is no user currently logged in - retrieving default theme.
[15 Aug 15:39]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[15 Aug 15:39]  INFO - --> 200 OK 151 (35.0ms)

注意:我真正喜欢这种格式的是每个请求都以Started GET &lt;URL&gt; 或 POST 或 PUT 等开头,然后是哪个控制器和函数正在处理,以及发送的参数是。这对调试非常有帮助。同样,这种格式允许我们打印出我们自己的Rails.logger 日志信息。

当前日志输出(使用 ActiveRecord)

[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff
[20 Aug 11:40]  INFO - --> 200 OK 199 (144.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=language
[20 Aug 11:40]  INFO - --> 200 OK 148 (12.0ms)
[20 Aug 11:40]  INFO - GET http://localhost:2524/api/users/jeff/prefs/?label=theme
[20 Aug 11:40]  INFO - --> 200 OK 155 (15.0ms)

基本上我们现在得到的只是一个持续的 URL 调用流 - 它不会记录来自 Rails.logger 的任何内容,并且不同请求之间也没有分离 - 它实际上只是一个持续的 URL 和响应流。


我已经尝试像许多博客推荐的那样设置ActiveResource::Base.logger = ActiveRecord::Base.logger,但这只会让事情变得更糟——它记录了几个 URL,然后完全停止记录,除非它处于 ERROR 级别(而且我没有在任何地方设置记录级别,所以它应该仍然是默认的)

任何帮助或建议将不胜感激!!谢谢

【问题讨论】:

    标签: ruby-on-rails activerecord logging ruby-on-rails-3.1 activeresource


    【解决方案1】:

    【讨论】:

    • 嘿谢谢你的回答!!!原来我将日志记录恢复为不使用 ActiveRecord,然后过了一段时间再次尝试使用 ActiveRecord,结果要么发生了变化,要么发生了不一致,因为它工作得很好......除此之外我没有更好的解释:p但我会记住这个链接以备不时之需,谢谢!
    猜你喜欢
    • 2011-02-26
    • 2016-04-30
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2012-07-07
    • 2023-03-20
    • 2011-03-22
    • 1970-01-01
    相关资源
    最近更新 更多