我在Rails应用程序中进行了一些自定义日志记录,我想自动传感器一些参数。我知道我们有fitler_parameter_logging.rb
为params对象执行此操作。如何为我的自定义哈希实现这样的功能。
让我们说我记录了这样的事情:
Rails.logger.info {name: 'me', secret: '1231234'}.inspect
所以我的secret
密钥应该在日志中感知。
我知道在登录之前我可以亲自delete
键,但它会给我的应用程序增加噪音。
答案 0 :(得分:0)
问题标题讨论了删除参数,但您的问题涉及审查与Rails.application.config.filter_parameters
的工作方式类似的参数。如果是后者,看起来已经在Manually filter parameters in Rails中得到了解答。如果它是前者,假设一个过滤器列表和一个哈希:
FILTER_LIST = [:password, :secret]
hash = {'password' => 123, :secret => 321, :ok => "this isn't going anywhere"}
然后你可以这样做:
hash.reject { |k,v| FILTER_LIST.include?(k.to_sym) }
假设过滤器列表始终是符号,那么它将处理字符串和符号键匹配。此外,如果它们相同且您不需要单独的过滤器列表,则始终可以使用与config.filter_parameters
相同的列表:
hash.reject { |k,v| Rails.application.config.filter_parameters.include?(k.to_sym) }
如果你想在自己的日志记录中更容易使用它,你可以考虑使用猴子修补Hash
类:
class Hash
def filter_like_parameters
self.reject { |k,v| Rails.application.config.filter_parameters.include?(k.to_sym) }
end
end
然后您的日志记录代码将变为:
Rails.logger.info {name: 'me', secret: '1231234'}.filter_like_parameters.inspect
如果您将补丁自定义功能添加到类似核心的类中,但是对于要进行大量调用的调用,最好使用非常钝的方法名称来降低与任何其他库发生冲突的可能性可能会共享相同的方法名称。
希望有所帮助!