可配置的ruby记录器设置:Logger.new().level = variable

我想更改应用程序( 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,但必须有一个更优雅的方式!

有没有人有任何想法?

-daniel

解决方法

为什么不在配置哈希中使用文字常量?
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(这不是内置的!).

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...