Rails 5提供参数过滤,我在config.filter_parameters += ["my_token"]
中指定了application.rb
。
在开发(环境)模式下测试我的应用程序,我看到my_token
已从日志文件的请求行中正确过滤:
Started GET "/something?my_token=[FILTERED]"
然而,紧接着的SQL日志行仍然以纯文本形式包含参数的值(" SELECT stuff FROM things,"等,my_token
作为参数)
Rails 5是否提供了一种从日志文件的SQL部分过滤此原始值的方法?
我还在生产模式下运行我的应用程序,虽然日志文件更简洁,但它们仍会在生成的SQL语句的D类型日志行中显示未过滤的值。
我没有指定自定义日志设置 - 默认情况下,我的过滤器参数设置以外的所有内容都是。
我自己的搜索显示没有相关的讨论。也许我错过了什么?
THX!
答案 0 :(得分:6)
如果要完全禁用SQL日志进行生产,可以将config/environments/production.rb
中的日志级别更改为:info
config.log_level = :info
如果您只想对包含敏感数据的少数查询进行日志记录,则可以使用Rails.logger.silence。它会在提供的块的持续时间内使日志静音。因此,它可以用于避免将特定的SQL查询写入日志。
用法:
def index
Rails.logger.silence do
# load method is used to force query execution inside the block
@items = Item.all.load
end
end
请记住,查询是懒惰地执行的,因此如果查询在块之外执行,则无论如何都会记录它。以下示例将失败:
def index
Rails.logger.silence do
# The query will be executed outside the block when @items is first used in the view
@items = Item.all
end
end