gpt4 book ai didi

Ruby: 未初始化常量 Log4r::DEBUG (NameError) 问题

转载 作者:数据小太阳 更新时间:2023-10-29 07:43:33 25 4
gpt4 key购买 nike

在Ruby中使用log4r时,我写了一个类似于下面的配置文件:

  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)

为什么要这样做?

最佳答案

有点奇怪。在访问日志级别常量之前,您需要创建一个 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
>>

为了支持custom levels日志级别仅在加载实例时加载(有争议的是这是否是正确的方法)。

这是实际加载关卡的代码(从 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"
}

关于Ruby: 未初始化常量 Log4r::DEBUG (NameError) 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com