【问题标题】:Disabling Rails logging from script/runner从脚本/运行器禁用 Rails 日志记录
【发布时间】:2010-10-31 01:45:23
【问题描述】:

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

我想要做的就是在脚本的生命周期内禁止所有日志记录。通过阅读文档,看起来如果我可以处理它的Rails::Configuration,我应该能够将log_level 设置为:debug 以外的其他值,或者将其logger 设置为nil。我在正确的轨道上吗?如果是这样,我如何访问其Rails::Configuration 对象?

【问题讨论】:

    标签: ruby-on-rails logging


    【解决方案1】:

    我能想到几种方法。

    1) 将日志级别设置得如此之高,以至于不会记录任何内容:

    ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN
    

    有关更多信息,请参阅Logger::Severity。 UNKNOWN 是最高的。

    "level" 只是一个数字,所以如果您觉得偏执,可以将其设置为 Logger::Severity::UNKNOWN + 1。 :)

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

    ActiveRecord::Base.logger = Logger.new('/dev/null')
    

    (我假设 Rails 只使用了一个 Logger 实例,并且它是您通过 ActiveRecord::Base.logger 获得的实例。如果有更多,您必须找到它们和他们一起摆弄。)

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

    【讨论】:

    • 啊哈!这正是我一直在寻找的。谢谢!
    • 我把 ActiveRecord::Base.logger.level = Logger::Severity::UNKNOWN 放在 enviroment.rb 的末尾,这样就可以了。 (执行 config.log_level = :info 似乎不适用于 mongrel)
    • Logger::Severity::UNKNOWN + 1 很搞笑! =)
    【解决方案2】:

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

    (我知道你说过你对改变环境不感兴趣,但我想我会扔在那里,你可以create a new env 获取一个数据加载脚本,它具有大部分相同的设置但没有相当容易的日志记录)

    【讨论】:

    • 嗯。这是一个不错的主意,也许我会尝试一下。但是,据您所知,没有办法即时覆盖配置设置?
    • 我不知道;环境运行后,我什至不确定您是否可以访问设置的值。
    猜你喜欢
    • 2013-06-06
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2012-11-17
    • 2018-07-17
    相关资源
    最近更新 更多