2011-03-27 6 views
1

을 타임 스탬프를 추가 I가 다음 로거 클래스 :레일에 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/