2010-04-05 53 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