2010-02-17 67 views

回答

0

您可以通过重载Logger class

+0

有没有简单的方法,没有写很多代码? – turri 2010-02-17 14:56:38

+0

@turri不是我所知道的。它看起来像(Logger :: INFO等)中的级别非常多。也许还有另一种方式,但现在我想不出来 – marcgg 2010-02-17 15:18:59

3

日志级别创建自己的记录器在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 
3

您自己的记录器只需要覆盖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 
+0

IMO,这是一个更好的答案,因为它避免了Ruby核心的猴子补丁。 + – sethvargo 2014-08-22 17:55:44

4

您可以简单地添加到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.') 
2

如果你开始需要一堆定制的东西,它可能是值得一试log4r,这是一个灵活的日志记录库,可以让你轻松地做一堆有趣/有用的东西。

0

这是一个古老的问题,但由于它在谷歌上出现如此之高,我认为有必要更正答案。您实际上可以使用Logging.init方法。这里是你将如何这是通过使用logging宝石的2.0.0添加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' 

相关问题