代码之家  ›  专栏  ›  技术社区  ›  Daniel

可配置的ruby logger设置:logger.new().level=变量

  •  8
  • Daniel  · 技术社区  · 14 年前

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

    require 'logger'
    
    config = { :level => 'Logger::WARN' }
    
    log = Logger.new STDOUT
    log.level = Kernel.const_get config[:level]
    

    好吧,IRB对此并不满意,并向我的脸上抛出了“nameerror:wrong constant name logger::warn”。呸!我被侮辱了。

    我可以在一个案例/何时解决这个问题,或者log.level=1,但必须有一个更优雅的方法!

    有人有什么想法吗?

    -丹尼尔

    1 回复  |  直到 14 年前
        1
  •  15
  •   Mark Rushakoff    14 年前

    为什么不直接用 config 搞砸?

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

    那你就不必瞎混了 const_get 或者类似的事情;你可以简单地 log.level = config[:level] .

    如果它 绝对必须 作为字符串,您可以删除命名空间前缀并调用 康斯坦格 Logger 模块:

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

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