可配置的ruby记录器设置:Logger.new().level = variable

Dan*_*iel 8 ruby logging constants

我想更改应用程序(ruby)的日志记录级别.

require 'logger'

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

log = Logger.new STDOUT
log.level = Kernel.const_get config[:level]
Run Code Online (Sandbox Code Playgroud)

嗯,irb对此并不满意,并在我的脸上扔了"NameError:错误的常量名称Logger :: WARN".啊! 我被侮辱了.

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

有没有人有任何想法?

-daniel

Mar*_*off 15

为什么不在config哈希中使用文字常量?

config = { :level => Logger::WARN }
Run Code Online (Sandbox Code Playgroud)

然后你不必愚弄const_get或类似的东西; 你可以干脆做log.level = config[:level].

如果绝对必须是一个字符串,可以删除命名空间前缀和调用const_get上的Logger模块:

irb(main):012:0> Logger.const_get 'WARN'
=> 2
Run Code Online (Sandbox Code Playgroud)

如果它确实必须是限定字符串,您可以尝试使用此博客的qualified_const_get方法(这不是内置的!).

  • 常量不能存储在配置中,因为配置是从yaml文件加载的,但Logger.const_get'WARN'对我很有用! (3认同)