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

qinghe · 2015年01月30日 · 最后由 qinghe 回复于 2015年01月30日 · 2209 次阅读

案例是这样的: 一个 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 楼 已删除

#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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号