Настраиваемая настройка ruby ​​logger: Logger.new (). Level = variable - PullRequest
8 голосов
/ 05 апреля 2010

Я хочу изменить уровень регистрации приложения (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

1 Ответ

15 голосов
/ 05 апреля 2010

Почему бы вам просто не использовать буквальную константу в вашем config хэше?

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

Тогда вам не нужно дурачиться с const_get или чем-то подобным;Вы можете просто сделать log.level = config[:level].

Если оно обязательно должно быть строкой, вы можете удалить префикс пространства имен и вызвать const_get в модуле Logger:

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

Если действительно действительно должна быть квалифицированной строкой, вы можете попробовать метод qualified_const_get этого блога (который не является встроенным!).

...