【问题标题】:Configurable ruby logger setup: Logger.new().level = variable可配置的 ruby​​ 记录器设置:Logger.new().level = variable
【发布时间】:2010-04-05 15:55:38
【问题描述】:

我想更改应用程序 (ruby) 的日志记录级别。

require 'logger'

config = { :level => 'Logger::WARN' }

log = Logger.new STDOUT
log.level = Kernel.const_get config[:level]

好吧,irb 对此并不满意,并在我脸上扔了“NameError:错误的常量名称 Logger::WARN”。啊!我被侮辱了。

我可以在某个情况下/何时解决这个问题,或者执行 log.level = 1,但必须有更优雅的方式!

有人有什么想法吗?

-丹尼尔

【问题讨论】:

    标签: ruby constants logging


    【解决方案1】:

    为什么不在config 哈希中使用文字常量?

    config = { :level => Logger::WARN }
    

    那么你就不必胡闹const_get 或类似的东西了;你可以简单地做log.level = config[:level]

    如果它绝对必须是字符串,您可以删除命名空间前缀并在Logger 模块上调用const_get

    irb(main):012:0> Logger.const_get 'WARN'
    => 2
    

    如果它真的必须是限定字符串,您可以尝试使用this blog's qualified_const_get method(它不是内置的!)。

    【讨论】:

    • 该常量无法存储在配置中,因为配置是从 yaml 文件加载的,但 Logger.const_get 'WARN' 对我来说非常有用!
    猜你喜欢
    • 2010-12-29
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    • 2020-06-03
    • 2016-12-09
    • 2018-06-25
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多