Rails记录器格式字符串配置

如何配置rails logger以其他格式输出其日志字符串? 我想获得更具信息性的内容,如:

[日志级别] [时间] [消息]

调试:01-20-2008 13:11:03.00:方法调用

当我想在我的development.log中找到仅来自某个日志级别的消息(例如debug)时,这对我有用。

做了一些挖掘并在RubyOnRails Talk谷歌小组中发现了这篇文章。

所以我稍微修改了它并把它放在我的环境结尾.rb:

module ActiveSupport class BufferedLogger def add(severity, message = nil, progname = nil, &block) return if @level > severity message = (message || (block && block.call) || progname).to_s level = { 0 => "DEBUG", 1 => "INFO", 2 => "WARN", 3 => "ERROR", 4 => "FATAL" }[severity] || "U" message = "[%s: %s #%d] %s" % [level, Time.now.strftime("%m%d %H:%M:%S"), $$, message] message = "#{message}\n" unless message[-1] == ?\n buffer << message auto_flush message end end end 

这会产生如下格式字符串:

[DEBUG:0121 10:35:26#57078]渲染布局/ _header(0.00089)

对于rails 4应用程序,我已经整理了一个简单的gem,它不仅增加了对时间戳和日志级别等基本标记的支持,甚至还为日志消息本身添加了颜色。

https://github.com/phallguy/shog

标签的问题在于它们会使您的日志混乱到不可读的程度。

我推荐像木材这样的东西。 它会自动使用上下文(级别,时间,会话ID等)扩充日志,而不会牺牲可读性。

 # config/initializers/rack_logger.rb module Rails module Rack class Logger < ActiveSupport::LogSubscriber # Add UserAgent def started_request_message(request) 'Started %s "%s" for %s at %s by %s' % [ request.request_method, request.filtered_path, request.ip, Time.now.to_default_s, request.env['HTTP_USER_AGENT'] ] end end end end 

来源链接