我使用log4r作为我的记录器。我有两个问题要问四。
下面是我使用的代码的详细信息。请帮助解决这个问题。
我的YAML配置如下: File:yml.cfg
# *** YAML2LOG4R ***
log4r_config:
# define all pre config global log4r settings ...
pre_config:
custom_levels:
- DEBUG2
- DEBUG
- PRINT
- INFO
- WARN
- ERROR
- FATAL
global:
level : ALL
root :
level : DEBUG2
trace : 'true'
# define all outputters (stderr, stdout and logfile with custom formatters)
outputters:
- type : StderrOutputter
name : stderr
level : ERROR
only_at :
- ERROR
- FATAL
formatter:
pattern : '%-7l: %m'
type : PatternFormatter
- type : StdoutOutputter
name : stdout
level : INFO
only_at :
- INFO
- WARN
- ERROR
- FATAL
formatter:
pattern : '%-7l: %m'
type : PatternFormatter
- type : FileOutputter
filename : debug.log
name : logfile
level : ALL
trace : 'true'
trunc : 'false'
formatter :
type : MyLogFormatter
loggers:
- name : MyAppClass
additive : 'false'
trace : 'true'
level : ALL
outputters :
- stderr
- stdout
- logfile我有一个日志配置类(logConfig.rb)
require 'log4r'
require 'log4r/lib/yamlconfigurator'
class LogConfig
class Log4r::MyLogFormatter < Log4r::Formatter
def format(event)
buff = "%-7s: " % Log4r::LNAMES[event.level]
buff += "(Trace: %-30s): " % [event.tracer[0].split(File::SEPARATOR)[-1]]
if event.data.kind_of?(String) then buff += event.data
elsif event.data.kind_of?(Array) then buff += "\n\t\t%s : %s\n" % [event.data.class, event.data.inspect]
elsif event.data.kind_of?(Hash) then buff += "\n\t\t%s : %s\n" % [event.data.class, event.data.inspect] end
return buff + "\n"
end
end # class MyLogFormatter
def initialize
cfg = Log4r::YamlConfigurator
cfg.load_yaml_file('yml.cfg')
Log4r::StderrOutputter.new 'console'
Log4r::StdoutOutputter.new 'console'
end # def initialize
end # class LogConfig在我的应用类(myClass.rb)中
require 'logConfig'
class MyAppClass
ClassName = self
def initialize
LogConfig.new
@log = Log4r::Logger["#{ClassName}"]
end # initialize
def print_logs
@log.fatal 'this is fatal'
@log.error 'this is error'
@log.warn 'this is warning'
@log.info 'this is info'
@log.print 'this is print'
@log.debug 'this is debug'
@log.debug2 'this is debug2'
end
end
MyAppClass.new().print_logs在debug.log文件中,我正确地获得了预期的消息:
FATAL : (Trace: myClass.rb:11:in `print_logs' ): this is fatal
ERROR : (Trace: myClass.rb:12:in `print_logs' ): this is error
WARN : (Trace: myClass.rb:13:in `print_logs' ): this is warning
INFO : (Trace: myClass.rb:14:in `print_logs' ): this is info
PRINT : (Trace: myClass.rb:15:in `print_logs' ): this is print
DEBUG : (Trace: myClass.rb:16:in `print_logs' ): this is debug
DEBUG2 : (Trace: myClass.rb:17:in `print_logs' ): this is debug2但是,在控制台(终端)中,我会得到两次打印的错误和致命消息。
>ruby myClass.rb
FATAL : this is fatal
FATAL : this is fatal
ERROR : this is error
ERROR : this is error
WARN : this is warning
INFO : this is info请帮助解决上述问题。
发布于 2013-09-19 13:36:43
我想您在配置文件中提到了相同的内容。
outputters:
- type : StderrOutputter
name : stderr
level : ERROR
only_at :
- ERROR
- FATAL
- type : StdoutOutputter
name : stdout
level : INFO
only_at :
- INFO
- WARN
- ERROR
- FATAL
- type : FileOutputter
filename : debug.log
name : logfile
level : ALL
trace : 'true'
trunc : 'false'对于stdout和stderr输出程序,都应该打印错误和致命信息。
在控制台中,您要求的是stdout和stderr打印。
Log4r::StderrOutputter.new 'console'
Log4r::StdoutOutputter.new 'console'只要删除配置文件的stdout中的错误和致命错误,这两个打印就会消失。因此,对于致命或错误,它将采取stderr和信息和警告,它将使用stdout。
就颜色而言,你可以使用http://rubygems.org/gems/log4r-color而不仅仅是log4r。这是log4r gem的扩展。请看一下Class: Log4r::ColorOutputter
https://stackoverflow.com/questions/18895425
复制相似问题