如何让Rails在特定日志中绕过parameter filter参数过滤规则
Rails自定义日志绕过参数过滤解决方案
原理说明
你配置的Rails.application.config.filter_parameters规则会全局作用于Rails日志实例接收的所有哈希参数,只要哈希的键命中过滤列表中的字段,对应值就会被自动替换为[FILTERED],你的自定义日志就是因为state键命中了过滤规则被误拦截。
可选解决方案
方案1:修改哈希键名,避免命中过滤规则
过滤规则为严格匹配键名,只需将哈希键改为不在过滤列表内的名称即可,改动最小:Rails.logger.info("Transaction state has changed.", transaction_state: transaction.state)方案2:将待打印内容序列化为字符串输出
Rails参数过滤器只会处理入参中的哈希结构,不会解析字符串内的内容,可直接将内容拼接为字符串或转JSON输出:# 直接字符串拼接 Rails.logger.info("Transaction state has changed. state: #{transaction.state}") # 转JSON保留哈希结构 Rails.logger.info("Transaction state has changed. #{ {state: transaction.state}.to_json }")方案3:使用原生Logger跳过Rails过滤逻辑
如果必须保留state作为哈希键名,可以调用无过滤逻辑的Ruby原生Logger实例输出:# 复用Rails原有日志文件路径 native_logger = ::Logger.new(Rails.logger.instance_variable_get(:@logdev)) native_logger.info("Transaction state has changed.", state: transaction.state)
内容的提问来源于stack exchange,提问作者Leticia Esperon
相关产品推荐
相关产品推荐

