如何将特定请求详细信息记录到rails服务器日志

我通常不喜欢直接询问如何在不了解正在发生的事情的情况下做些什么,但我对rails很新,我很难完成这个。

基本上,我需要在单个日志语句中捕获每个请求的以下信息(如果可能)

  • 日志输入日期
  • 日志输入时间
  • HTTP方法
  • 请求的URL
  • 港口
  • 请求者的IP地址
  • 请求者的用户代理
  • 引用url
  • HTTP响应代码
  • 主机名
  • 自定义日志格式的首选方法是什么? 是否可以只修改现有日志并将其传递给它? 或者我是否需要扩展和覆盖我需要的行为?

    我不需要将其保存到不同的日志文件或任何内容,只需在每个请求中输出到STDOUT。

    任何有关这方面的帮助将不胜感激。

    谢谢!

    我相信您请求的大部分信息(如果不是全部的话)都可以在请求标题和响应中找到。 之前已经回答了有关如何将其添加到日志的信息,但基本上您可以使用ApplicationController中的around_filter来记录您关注的信息以形成请求标头。 例如,以下是如何从响应中的请求和状态代码中记录用户代理:

    class ApplicationController < ActionController::Base around_filter :global_request_logging def global_request_logging logger.info "USERAGENT: #{request.headers['HTTP_USER_AGENT']}" begin yield ensure logger.info "response_status: #{response.status}" end end end 

    至于获得所需的格式,如果你打包调用,你可以输出你想要的任何格式。 此外,Rails记录器也是非常可定制的,并且已经存在一些项目可能适合您替换默认日志记录的需求或作为创建有用格式的灵感:

    • lograge - 使用单行键值输出替换默认的Rails日志记录,但尚未执行请求参数
    • scrolls - 更通用的上下文,键值

    我知道这是一个老问题,但对于未来的人来说,我认为Rails 3.2+中的首选方法是使用ActiveSupport :: TaggedLogging。 介绍这个的博客文章就在这里

    并且是一个快速示例,它为每个日志消息添加子域,每个请求的UUID和用户代理。 您可以在环境初始化文件中弹出它。

     config.log_tags = [ :subdomain, :uuid, lambda { |request| request.user_agent } ]