Rails日志。如何在日志中隐藏特定控制器的所有参数?

时间:2019-08-14 01:29:19

标签: ruby-on-rails

我有一个带有Update控制器的Rails 6应用,可以接受JSON Post请求:

test.f

当以JSON作为正文的Post请求时...

class ProcessLogsController < ApplicationController
  #...

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

  #...
end

我在日志中得到了这个

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" 
}'

输出正确且预期,但是我的日志中有这个corncern:

  • 参数(第3行),它有两次JSON请求,一个是 request.body ,另一个是 process_log 参数。
  • 此控制器一天可能有数百万个请求。而且在JSON帖子中可以找到更多密钥

所以我的问题是...

对于此特定的 controller#action ,可以通过任何方式禁用/隐藏日志中的 Parameters 行。

我不想将级别设置为:warn,因为我想查看其他信息(重新放置代码等)。

1 个答案:

答案 0 :(得分:0)

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

顺便说一句,如果您说的是真的,那么您可能应该考虑如何使您的日志不那么冗长。每天有数百万的请求,您将无法继续跟踪此日志。

我们在应用程序中使用https://github.com/roidrage/lograge进行生产日志。它不那么冗长,并且所有内容都自动记录在一条长行中。一个请求不可能在另一个请求的中间开始记录(但是我希望Rails能够找到解决方法)。