Rails标记日志

时间:2012-06-20 17:21:07

标签: ruby-on-rails-3 logging

我正在使用标记日志记录与Unicorn并在我的环境文件中使用以下配置。

config.logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
config.log_tags = [:uuid]

到目前为止一切顺利。

说到标签,有没有办法 -

  1. 打印出特定的请求标题

  2. 打印自定义UUID,即我可以生成的内容。 rails吐出的默认UUID太长。

1 个答案:

答案 0 :(得分:1)

在此处查看此要点中的一些示例https://gist.github.com/2513183

您可以向log_tags数组添加一个proc,该数组可以访问请求对象。

您可以在该proc中生成UUID,或者您可以通过before_filter中的ApplicationController传递一些来自request.env的内容,如下所示:

#application_controller.rb
before_filter :set_some_request_env

def set_some_request_env
  request.env['some_var'] = "Happy"
end

# application.rb
config.log_tags = [
  -> request {
    request.env['some_var']
  }
]

更新

您可以使用#tagged方法为给定块内发送的所有日志消息添加标记。

要从请求或控制器参数中获取参数到标记输出,您可以执行以下操作:

#application_controller.rb
around_filter :add_tags_to_logs

def add_tags_to_logs
  Rails.logger.tagged(custom_uuid_for_current_user) do
    yield
  end
end