4

我目前有一个 Rails 应用程序,它有多个进程:由 Redis 触发的 Web 服务进程和后台工作进程。

问题是有时很难检查日志文件并确定给定行为发生的位置——是在 Web 部分还是在 Resque 工作人员上?

有没有办法包含进程名称甚至进程 ID 或允许我按进程区分每个日志条目的东西?

4

2 回答 2

4

看起来有一些选择:

这是一篇相关的 SO 文章: - Rails 3.2.2 日志文件无序,请求交织在一起

对我来说最好的选择似乎是使用 :uuid 。当您有多个进程记录到同一个文件时,它传达相同的信息以让您区分请求。

于 2013-03-20T19:15:02.830 回答
2

如果您需要控制器上下文之外的进程 ID(例如延迟作业),您可以将其放入初始化程序中:

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

class Formatter
  SEVERITY_TO_COLOR_MAP   = {'DEBUG'=>'0;37', 'INFO'=>'32', 'WARN'=>'33', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}

  def call(severity, time, progname, msg)
    formatted_severity = sprintf("%-5s","#{severity}")

    formatted_time = time.strftime("%Y-%m-%d %H:%M:%S.") << time.usec.to_s[0..6].ljust(6)
    color = SEVERITY_TO_COLOR_MAP[severity]

    "\033[0;37m#{formatted_time} (pid:#{$$})\033[0m [\033[#{color}m#{formatted_severity}\033[0m] #{msg.strip}\n"
  end

end

Rails.logger.formatter = Formatter.new

更多信息:http: //www.software-thoughts.com/2013/08/adding-process-id-and-timestamps-to.html

原帖在这里:http ://cbpowell.wordpress.com/2012/04/05/beautiful-logging-for-ruby-on-rails-3-2/

于 2013-08-18T03:40:50.380 回答