2010-04-05 38 views
8

我想更改应用程序(ruby)的日志记录级别。可配置的红宝石记录器设置:Logger.new()。level = variable

那么,IRB不是满意了,扔了“NameError:错误常量名记录仪:: WARN”在我的脸上。啊!我被侮辱了。

我可以在一个case /什么时候解决这个问题,或者做log.level = 1,但必须有一个更优雅的方式!

有没有人有任何想法?

-daniel

回答

15

你为什么不只是用在你的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(这不是内置的!)。

+3

该常量不能存储在配置中,因为config是从yaml文件加载的,但Logger.const_get'WARN'对我来说非常适用! – Daniel 2010-04-06 00:50:52