我需要为ruby logger添加一个自定义日志级别,如“详细”或“流量”,该怎么办?
我需要为ruby logger添加一个自定义日志级别,如“详细”或“流量”,该怎么办?
您只需添加到Logger类:
require 'logger'
class Logger
def self.custom_level(tag)
SEV_LABEL << tag
idx = SEV_LABEL.size - 1
define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block|
add(idx, nil, progname, &block)
end
end
# now add levels like this:
custom_level 'TRAFFIC'
custom_level 'ANOTHER-TAG'
end
# using it:
log = Logger.new($stdout)
log.traffic('testing')
log.another_tag('another message here.')
您只需添加到Logger类:
require 'logger'
class Logger
def self.custom_level(tag)
SEV_LABEL << tag
idx = SEV_LABEL.size - 1
define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block|
add(idx, nil, progname, &block)
end
end
# now add levels like this:
custom_level 'TRAFFIC'
custom_level 'ANOTHER-TAG'
end
# using it:
log = Logger.new($stdout)
log.traffic('testing')
log.another_tag('another message here.')
你自己的记录器只需要覆盖 Logger#format_severity
方法,像这样:
class MyLogger < Logger
SEVS = %w(DEBUG INFO WARN ERROR FATAL VERBOSE TRAFFIC)
def format_severity(severity)
SEVS[severity] || 'ANY'
end
def verbose(progname = nil, &block)
add(5, nil, progname, &block)
end
end
日志级别只是定义的整数常量 logger.rb
:
# Logging severity.
module Severity
DEBUG = 0
INFO = 1
WARN = 2
ERROR = 3
FATAL = 4
UNKNOWN = 5
end
您可以使用您喜欢的任何级别记录消息 Logger#add
方法:
l.add 6, 'asd'
#=> A, [2010-02-17T16:25:47.763708 #14962] ANY -- : asd
如果你开始需要一堆自定义的东西,可能值得一试 log4r的,这是一个灵活的日志库,可以让你轻松地做一堆有趣/有用的东西。
您可以通过重载来创建自己的记录器 记录器类
这是一个老问题,但由于它在谷歌上如此之高,我认为必须纠正答案是有用的。你实际上可以使用 Logging.init
方法。这是你如何添加一个 trace
日志级别
require 'logging'
Logging.init %w(trace debug info warn error fatal)
Logging.logger.root.level = :trace
Logging.logger.root.add_appenders Logging.appenders.stdout
Logging.logger['hello'].trace 'TEST'
这是使用 2.0.0
的 logging
宝石。