2011-03-27 44 views
1

我有以下的記錄器類:添加時間戳的Rails AppLogger

module AppLogger 
    @@_loggers = {} 

    def self.logger; self._creater_logger("my_app_name"); end 

    def self._creater_logger(name) 
    @@_loggers[name] ||= $0 == "irb" ? Logger.new(STDOUT) : Logger.new(Rails.root.join("log",Rails.env + ".#{name}.log")) 
    end 

    def self.format_exception(e) 
    "#{e.message} [[\n\t\t#{e.backtrace.split("\n").map { |l| "\t\t#{l}" }.join("\n")}]]" 
    end 
end 

,並使用它:

AppLogger.logger.info(msg) 

是否有辦法來自動添加時間戳到每個日誌行(無需手動將它添加到記錄器的每個調用中)?

回答

0

您可以重新定義類的單例並添加全部或某些級別的日誌記錄級別。

%w(debug info warn error fatal).each do |level| 
    eval <<-end_eval 
    def Applogger.logger.#{level}(message="", &blk) 
     if message == "" and block_given? 
     message = blk.call 
     end 
     super(<you time stamp>) { message } 
    end 
    end_eval 
end 

添加基本上什麼都你的心臟在超級方法慾望。

我從我的舊博客文章中抓取了這段代碼,我必須將自定義信息添加到我的記錄器中,您可以參考該文章以獲取更多詳細信息。

http://www.snitchmedia.com/blog/2009/11/24/pimping-ruby-logger-instance/