使用时log4r
在 Ruby 中,我编写了一个类似于以下内容的配置文件:
require 'rubygems'
require 'log4r'
require 'log4r/outputter/datefileoutputter'
SERVICE_LOG = {
:log_name => 'service',
:log_file => 'service.log',
:log_level => Log4r::DEBUG,
:message_pattern => "[%-5l %d] %C: %M",
:date_pattern => "%Y-%m-%d %H:%M:%S"
}
当我运行它时,它抛出了以下异常:
C:/Ruby187/lib/ruby/gems/1.8/gems/activesupport-2.3.5/lib/active_support/dependencies.rb:440:in `load_missing_constant': uninitialized constant Log4r::DEBUG (NameError)
它为什么这么做?
This is有点奇怪。你需要创建一个logger
实例,然后才能访问日志级别常量。这是它在 irb 上的样子:
>> require "log4r"
=> true
>> Log4r::DEBUG
NameError: uninitialized constant Log4r::DEBUG
from (irb):2
>> Log4r::Logger.root
=> #<Log4r::RootLogger:0x101737948 @outputters=[], @level=0>
>> Log4r::DEBUG
=> 1
>>
为了支持自定义级别 http://log4r.rubyforge.org/rdoc/log4r/configurator_rb.html仅当加载实例时才加载日志级别(这是否是正确的方法存在争议)。
这是实际加载关卡的代码(从RootLogger#instance
):
Log4r.define_levels(*Log4rConfig::LogLevels)
所以在你的代码中你可以这样称呼它:
require 'rubygems'
require 'log4r'
require 'log4r/outputter/datefileoutputter'
Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)
SERVICE_LOG = {
:log_name => 'service',
:log_file => 'service.log',
:log_level => Log4r::DEBUG,
:message_pattern => "[%-5l %d] %C: %M",
:date_pattern => "%Y-%m-%d %H:%M:%S"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)