Ruby: неинициализированная константа Log4r::DEBUG (NameError) проблема
При использовании 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)
Почему он это сделал?
3 ответа
Это немного странно. Вам нужно создать 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
>>
Для поддержки пользовательских уровней уровни журналов загружаются только при загрузке экземпляра (можно утверждать, что это правильный подход).
Это код, который на самом деле загружает уровни (вызывается из 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"
}
Эти константы, кажется, больше не существуют. Что я обнаружил, так это:
>> Log4r::Log4rConfig.const_get :LogLevels
#=> ["DEBUG", "INFO", "WARN", "ERROR", "FATAL"]
Может быть, посмотрите на их примеры (например, require
а также include
Log4r):
Возможно, вы могли бы попробовать что-то вроде этого
require 'rubygems'
require 'log4r'
L4R = Log4r::Logger.new("Logger")
Log4r::FileOutputter.new('service',
:filename=>"service.log",
:level=>Log4r::DEBUG)
L4R.add('service')