Rails 请教部署在 Passenger 上的 Rails 项目,如何重新定义日志格式?(已解决)

qinghe · January 30, 2015 · Last by qinghe replied at January 30, 2015 · 2201 hits

案例是这样的: 一个 Rails3 应用,部署在 Passenger 上,现在需要添加请求日志分析功能,于是我们在日志输出格式里添加了当前进程号。由于进程可能重复使用,我们希望加入 RequestID, 到每一行日志中,请问有做过的吗?

原始日志:Rendered users/login.html.erb within layouts/application (38.8ms) 添加进程号:[4022] Rendered users/login.html.erb within layouts/application (38.8ms) 期望: [4022][xxxxx(request_id)] Rendered users/login.html.erb within layouts/application (38.8ms)

request_id:请参考 ActionDispatch/RequestId

谢谢 @hz_qiuyuanxin@Rei 方案:

# config/environments/development.rb
# process_id, request_id
config.log_tags = [lambda{|req| $$}, :uuid]

不太明白你描述的究竟是怎么样的,能否贴一贴例子?例如说现有的日志是怎么样的,然后你想改成什么样的。

@hz_qiuyuanxin 谢谢回复,原帖已修改

3 Floor has deleted

#2 楼 @qinghe

我记得 elasticsearch-rails 这个 gem 在 rails 的 log 加了一些东西,如下图:

所以在理论是可以去 hack rails log 的,于是我找到了 Rails 打印这个 Log 地方,楼主可以根据这个一点点摸索回去

https://github.com/rails/rails/blob/488aefe7426bbd6f071019dff4c4cd1fbfd56742/actionpack/lib/action_controller/log_subscriber.rb#L17-L31

不过你可以参考这个,然后自己尝试将 request_id 加到 log tag 里去(我没有验证过 😂

http://stackoverflow.com/questions/9582200/add-session-id-to-each-log-in-rails

rails log_tags

@hz_qiuyuanxin , @Rei 非常感谢, 这个方案,比较方便。 http://stackoverflow.com/questions/9582200/add-session-id-to-each-log-in-rails 使用 ActiveSupport::TaggedLogging

最好的方法是 syslog,或者 logstash,fluentd

You need to Sign in before reply, if you don't have an account, please Sign up first.