【问题标题】:Error using Log4r使用 Log4r 时出错
【发布时间】:2014-01-05 14:22:13
【问题描述】:

我在使用 Log4r 时遇到问题。

uninitialized constant Log4r::Logger::RootLogger

我试过this,但还是报错:

>> 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>'

【问题讨论】:

  • 你能解释一下你为什么使用 Log4r 以及你想要完成什么吗?
  • 我在我的应用程序中使用 Log4r - 用于日志。但我在浏览器中看到此乘客错误 - 尝试访问我的应用程序时。
  • V1.1.11(昨天发布)有一个重大变化,所以我建议使用之前的版本 1.1.10(见我的answer)。我创建了一个bug report for it
  • 昨天我发现了问题所在,因为错误是from /var/lib/gems/1.9.1/gems/log4r-1.1.11,而这个版本是昨天才发布的,我猜他们有问题。所以我强制使用以前的版本,一切正常。

标签: ruby-on-rails ruby logging log4r


【解决方案1】:

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

您可以使用previous log4r-version 1.1.10:

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

log4r 在创建第一个记录器时定义了像Log4r::DEBUG 这样的常量。

您需要Log4r::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)来定义它们

这种技术允许它create loggers with different logging levels

【讨论】:

    【解决方案2】:

    虽然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 > 
    

    【讨论】:

    • 访问Log4r::DEBUG 时出现相同的未定义常量错误? (请参阅我正在测试的 Ruby 版本信息的更新答案)。
    猜你喜欢
    • 2014-05-09
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-01
    • 1970-01-01
    相关资源
    最近更新 更多