Rails记录器格式字符串配置

时间:2009-01-20 19:10:46

标签: ruby-on-rails logging

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

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

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

当我想在我的development.log中找到只来自某个日志级别的消息时,这对我来说真的很有帮助,比如调试。

4 个答案:

答案 0 :(得分:24)

在RubyOnRails Talk google小组中进行了一些挖掘并找到this帖子。

所以我稍微修改了它并把它放在我的环境结尾.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)

答案 1 :(得分:2)

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

https://github.com/phallguy/shog

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

# 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

source link