gpt4 book ai didi

ruby-on-rails - 如何禁用某个列的 ActiveRecord 日志记录?

转载 作者:行者123 更新时间:2023-12-03 23:28:43 25 4
gpt4 key购买 nike

我遇到了一个问题,在我看来,这对大多数 Rails 用户来说肯定是个问题,但我还没有找到任何解决方案。

例如,当执行一个可能很大的二进制文件的文件上传并将其存储在数据库中时,您肯定不希望 rails 或 ActiveRecord 在开发模式下记录此特定字段(日志文件,stdout)。如果文件相当大,这会导致查询执行中断并几乎杀死我的终端。

是否有任何可靠且非 hacky 的方法来禁用特定字段的日志记录?请记住,我不是在谈论禁用请求参数的日志记录 - 这已经很好地解决了。

感谢您提供有关这方面的任何信息!

最佳答案

这是一个 Rails 5 版本。开箱即用的 Rails 5 会截断二进制数据,但不会截断长文本列。

module LogTruncater
def render_bind(attribute)
num_chars = Integer(ENV['ACTIVERECORD_SQL_LOG_MAX_VALUE']) rescue 120
half_num_chars = num_chars / 2
value = if attribute.type.binary? && attribute.value
if attribute.value.is_a?(Hash)
"<#{attribute.value_for_database.to_s.bytesize} bytes of binary data>"
else
"<#{attribute.value.bytesize} bytes of binary data>"
end
else
attribute.value_for_database
end

if value.is_a?(String) && value.size > num_chars
value = "#{value[0,half_num_chars]} [REDACTED #{value.size - num_chars} chars] #{value[-half_num_chars,half_num_chars]}"
end

[attribute.name, value]
end

end

class ActiveRecord::LogSubscriber
prepend LogTruncater
end

关于ruby-on-rails - 如何禁用某个列的 ActiveRecord 日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13051949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com