所以我有一个之前不需要 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 级别(而且我没有在任何地方设置日志记录级别,所以它仍然应该默认)
任何帮助或建议将不胜感激!!谢谢