【问题标题】:How to log specific request details to rails server logs如何将特定请求详细信息记录到 Rails 服务器日志
【发布时间】:2012-07-01 07:47:42
【问题描述】:

我通常不喜欢直接询问如何做某事而不了解正在发生的事情,但我对 Rails 还很陌生,很难做到这一点。

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

  • 日志条目的日期
  • 日志条目时间
  • HTTP 方法
  • 请求的 URL
  • 端口
  • 请求者的IP地址
  • 请求者的用户代理
  • 引用 URL
  • HTTP 响应代码
  • 主机名

    自定义日志格式的首选方式是什么?是否可以只修改现有日志并将此信息传递给它?还是我需要扩展和覆盖我需要的行为?

    我不需要将它保存到不同的日志文件或任何东西,只需在每次请求时输出到 STDOUT。

    对此的任何帮助将不胜感激。

    谢谢!

  • 【问题讨论】:

      标签: ruby-on-rails ruby logging heroku


      【解决方案1】:

      我相信大部分(如果不是全部)您请求的信息都可以在请求标头和响应中找到。有关如何将其添加到日志的信息是 answered before,但基本上您可以在 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 - 更通用的上下文,键值

      【讨论】:

        【解决方案2】:

        我知道这是一个老问题,但对于偶然发现这个问题的未来人,我相信 Rails 3.2+ 中的首选方法是使用 ActiveSupport::TaggedLogging。介绍这个的博文是here

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

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

        【讨论】:

        • http headers 怎么样?
        猜你喜欢
        • 1970-01-01
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 2014-03-15
        • 2013-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多