首页 > 解决方案 > Rails 日志。如何在日志中隐藏来自特定控制器的所有参数?

问题描述

我有一个带有更新控制器的 rails 6 应用程序,准备好接受 JSON 发布请求:

class ProcessLogsController < ApplicationController
  #...

  # POST /process_logs.json
  def create
   # ... code to save the json in a database ...
  end

  #...
end

当以 JSON 为主体发出 Post 请求时...

curl -X POST \
  http://localhost:3000/process_logs.json \
  -H 'Content-Type: application/json' \
  -d '{
    "Time": "A UNIX timestamp",
    "Message": "Host Message could be very long, and may include secret info",
    "host": "My Hostname" 
}'

我在日志中得到了这个:

Started POST "/process_logs.json" for ::1 at 2019-08-13 20:16:37 -0500
Processing by ProcessLogsController#create as JSON
  Parameters: {"Time"=>"A UNIX timestamp", "Message"=>"[FILTERED]", "host"=>"My Hostname", "process_log"=>{"Time"=>"A UNIX timestamp", "Message"=>"[FILTERED]", "host"=>"My Hostname"}}
  Rendering text template
  Rendered text template (Duration: 0.2ms | Allocations: 1)
Completed 200 OK in 4ms (Views: 1.7ms | Allocations: 227)

输出是正确且符合预期的,但我的日志有这个问题:

所以我的问题是...

是否有任何方法可以禁用/隐藏此特定控制器#action日志中的参数行。

我不想将级别设置为 :warn 因为我想查看其他信息(响应代码等)

标签: ruby-on-rails

解决方案


实际上,您可以关闭参数包装到process_log参数中。查看包装参数的文档https://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html(5.2.x 的文档,但这种行为在 rails 6 中没有改变)

顺便说一句,如果你说的是真的,你也许应该考虑如何让你的日志不那么冗长。每天有数百万个请求,您无论如何都无法关注此日志。

我们在我们的应用程序中使用https://github.com/roidrage/lograge作为生产日志。它不那么冗长,并且所有内容都以原子方式记录到一条长行中。一个请求在不同请求的中间开始记录是不可能发生的(但我希望 rails 能弄清楚如何解决这个问题)。


推荐阅读