我想更改应用程序(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
答案 0 :(得分:15)
为什么不在config
哈希中使用文字常量?
config = { :level => Logger::WARN }
然后你不必愚弄const_get
或类似的东西;你可以做log.level = config[:level]
。
如果绝对必须是一个字符串,您可以删除命名空间前缀并在const_get
模块上调用Logger
:
irb(main):012:0> Logger.const_get 'WARN'
=> 2
如果确实必须是限定字符串,您可以尝试使用this blog's qualified_const_get
method(这不是内置的!)。