2010-02-17 59 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' 

相關問題