ruby-on-rails - 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)
输出是正确且符合预期的,但我的日志有这个问题:
- 参数(第3 行)它有两次 JSON 请求,一次用于request.body,另一次用于process_log参数。
- 这个控制器一天可能有数百万个请求。并且可以在 JSON 帖子中有更多的键
所以我的问题是...
是否有任何方法可以禁用/隐藏此特定控制器#action日志中的参数行。
我不想将级别设置为 :warn 因为我想查看其他信息(响应代码等)
解决方案
实际上,您可以关闭参数包装到process_log
参数中。查看包装参数的文档https://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html(5.2.x 的文档,但这种行为在 rails 6 中没有改变)
顺便说一句,如果你说的是真的,你也许应该考虑如何让你的日志不那么冗长。每天有数百万个请求,您无论如何都无法关注此日志。
我们在我们的应用程序中使用https://github.com/roidrage/lograge作为生产日志。它不那么冗长,并且所有内容都以原子方式记录到一条长行中。一个请求在不同请求的中间开始记录是不可能发生的(但我希望 rails 能弄清楚如何解决这个问题)。
推荐阅读
- java - 为什么 Android 中的 java 源代码有三个目录/文件夹?
- python - 将json数据存储到熊猫中
- c# - HTML 5 - 做什么
做? - groovy - 在 jenkinsfile 的 shell 执行步骤中访问 groovy 变量
- angularjs - angular-gettext 不会从 .PO 文件中选择字符串
- r - R:尝试将时间 AM/PM 值转换为 24 小时时出现问题
- php - 获取在现有 Symfony 3.4 应用程序中运行的 API 平台文档
- php - 如何将绑定变量用于 mySql 表的 inidcate 列?
- node.js - 意外的令牌......在 VSCode ESLint + Prettier
- firebase - 将谷歌分析迁移到 SDK Firebase:我可以保留我的实际财产吗?