如何在Rails中记录独立日志文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

在Rails中,我希望将一些信息记录在不同的日志文件中,而不是标准的Development.log或Production.log中。我想从一个模型类中进行这个日志记录。

提问于
用户回答回答于

您可以在任何模型中自己创建一个Logger对象。只需将文件名传递给构造函数并像通常的Rails一样使用对象即可。logger:

class User < ActiveRecord::Base
  def my_logger
    @@my_logger ||= Logger.new("#{Rails.root}/log/my.log")
  end

  def before_save
    my_logger.info("Creating user with name #{self.name}")
  end
end

在这里,我使用了一个class属性来回忆录记录器。这样就不会为创建的每个用户对象创建它,但是您不必这样做。还请记住,您可以将my_logger方法直接进入ActiveRecord::Base类(如果您不太喜欢猴子补丁),可以在应用程序的模型之间共享代码。

用户回答回答于

# Custom Post logger
require 'singleton'
class PostLogger < Logger
  include Singleton

  def initialize
    super(Rails.root.join('log/post_error.log'))
    self.formatter = formatter()
    self
  end

  # Optional, but good for prefixing timestamps automatically
  def formatter
    Proc.new{|severity, time, progname, msg|
      formatted_severity = sprintf("%-5s",severity.to_s)
      formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
      "[#{formatted_severity} #{formatted_time} #{$$}] #{msg.to_s.strip}\n"
    }
  end

  class << self
    delegate :error, :debug, :fatal, :info, :warn, :add, :log, :to => :instance
  end
end

PostLogger.error('hi')
# [ERROR 2012-09-12 10:40:15] hi

扫码关注云+社区