6

所以我有一个之前不需要 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 <URL>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 级别(而且我没有在任何地方设置日志记录级别,所以它仍然应该默认)

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

4

1 回答 1

1

也许lograge的实施会有所帮助:

https://github.com/roidrage/lograge/blob/master/lib/lograge.rb#L57

于 2012-12-13T01:44:08.040 回答