1

我在使用 Log4r 时遇到问题。

uninitialized constant Log4r::Logger::RootLogger

我试过这个,但仍然出现错误:

>> require "log4r"
=> true
>> Log4r::DEBUG
NameError: uninitialized constant Log4r::DEBUG
>> Log4r::Logger.root
=> uninitialized constant Log4r::Logger::RootLogger
from /var/lib/gems/1.9.1/gems/log4r-1.1.11/lib/log4r/staticlogger.rb:5:in `root'
    from (irb):5
    from /usr/bin/irb:12:in `<main>'
4

2 回答 2

1

您的问题Log4r::Logger.root取决于版本(实际版本 1.1.11 有此问题)。

您可以使用以前的 log4r-version 1.1.10

gem 'log4r', '<=1.1.10' #or '= 1.1.10'
require 'log4r'
Log4r::Logger.root

log4r 定义常量,就像Log4r::DEBUG创建第一个记录器一样。

您需要 aLog4r::Logger.new('dummy')才能访问级别常量。

require 'log4r'

p defined? Log4r::INFO   #false
Log4r::Logger.new('dummy')
p defined? Log4r::INFO   #constant -> is defined

一些背景:有一个常数Log4r::Log4rConfig::LogLevels定义不同的级别。在创建第一个记录器时定义了级别常量。您也可以使用Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)

这种技术允许它创建具有不同日志记录级别的记录器

于 2014-01-05T14:51:12.830 回答
0

尽管Log4r::Logger.root不再启用常量,但您提到的答案中稍后包含的代码确实引入了常量:

Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)

根据以下:

MacbookAir1:so1 palfvin$ irb
2.0.0p247 :001 > require 'log4r'
 => true 
2.0.0p247 :002 > Log4r.define_levels(*Log4r::Log4rConfig::LogLevels)
 => 5 
2.0.0p247 :003 > Log4r::DEBUG
 => 1 
2.0.0p247 :004 > 
于 2014-01-05T14:57:09.937 回答