Ruby on rails 从脚本/运行程序禁用Rails日志记录

Ruby on rails 从脚本/运行程序禁用Rails日志记录,ruby-on-rails,logging,Ruby On Rails,Logging,是否有某种方法可以禁用通过script/runner运行的脚本中的所有日志记录(无论是来自ActiveRecord、Rails的其他部分、插件等)?我运行了一个很长的数据加载脚本,它生成了大量无用的日志信息。我没有试图更改脚本/runner的环境(例如,生产、开发等)-脚本当前需要在“开发”环境中运行,目前正在这样做,没有任何问题 我要做的就是在脚本的生命周期内禁止所有日志记录。通过阅读文档,看起来如果我能得到它的Rails::Configuration的句柄,我应该能够将log_level设置

是否有某种方法可以禁用通过
script/runner
运行的脚本中的所有日志记录(无论是来自ActiveRecord、Rails的其他部分、插件等)?我运行了一个很长的数据加载脚本,它生成了大量无用的日志信息。我没有试图更改
脚本/runner
的环境(例如,生产、开发等)-脚本当前需要在“开发”环境中运行,目前正在这样做,没有任何问题


我要做的就是在脚本的生命周期内禁止所有日志记录。通过阅读文档,看起来如果我能得到它的
Rails::Configuration
的句柄,我应该能够将
log_level
设置为
:debug
之外的其他值,或者将它的
logger
设置为
nil
。我走对了吗?如果是这样,我如何访问它的
Rails::Configuration
对象

这些设置位于config/environments/*.rb文件中,它覆盖了environment.rb的默认设置。当它执行“Rails::Initializer.run do | config |”时,它将与config对象一起运行。我很确定您可以根据自己的需要进行更改,但我不确定您如何向它传递一个标志,表明它是当前正在执行的脚本/运行程序脚本


(我知道你说过你对改变环境不感兴趣,但我想我会把它扔掉,因为你可以使用一个数据加载脚本,它具有大多数相同的设置,但不容易记录日志)

我可以想出几种方法

1) 将日志级别设置为高,以便不会记录任何内容:

ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN
更多信息请参见。未知是最高的

“级别”只是一个数字,因此,如果您有妄想症,可以将其设置为Logger::Severity::UNKNOWN+1.:)

2) 将输出发送到/dev/null

ActiveRecord::Base.logger = Logger.new('/dev/null')
(我假设Rails只使用了一个Logger实例,这就是通过ActiveRecord::Base.Logger获得的实例。如果有更多的实例,你就必须找到它们并对它们进行处理。)


如果您不喜欢这些,您可以通过阅读文档找到其他内容。

。这是个不错的主意,也许我可以试试。但是,据你所知,没有办法在运行中覆盖配置设置?我不知道有任何方法;在环境运行之后,我甚至不确定您是否可以访问设置的值。啊哈!这正是我想要的。谢谢我将ActiveRecord::Base.logger.level=logger::Severity::UNKNOWN放在environment.rb的末尾,这样就行了。(doing config.log_level=:info似乎不适用于mongrel)
Logger::Severity::UNKNOWN+1
非常有趣!)