向Rails AppLogger添加时间戳

时间:2011-03-27 23:22:40

标签: ruby-on-rails ruby

我有以下记录器类:

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)

有没有办法自动为每个日志行添加时间戳(无需手动将其添加到每次对记录器的调用中)?

1 个答案:

答案 0 :(得分: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/