Настраиваемая рубиновая установка регистратора: Logger.new () .level = переменная

Я хочу изменить регистрирующийся уровень приложения (рубин).

require 'logger'

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

log = Logger.new STDOUT
log.level = Kernel.const_get config[:level]

Ну, irb не был доволен этим и бросил "NameError: неправильно постоянное имя Регистратор:: ПРЕДУПРЕДИТЕ" в моей поверхности. Тьфу! Я был оскорблен.

Я мог сделать это в случае/когда, чтобы решить это или сделать log.level = 1, но должен быть более изящный путь!

У кого-либо есть какие-либо идеи?

- daniel

8
задан Daniel 5 April 2010 в 15:55
поделиться

1 ответ

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

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

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

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

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

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

15
ответ дан 5 December 2019 в 11:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: