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 属性来制表日志记录器。这样就不会为每个创建的 User 对象创建它,但是您不需要这样做。还要记住,您可以将 my_logger方法直接注入到 ActiveRecord::Base类中(或者您自己的某个超类中,如果您不喜欢过多修补的话) ,以便在应用程序模型之间共享代码。
class DebugLog
def self.debug(message=nil)
return unless Rails.env.development? and message.present?
@logger ||= Logger.new(File.join(Rails.root, 'log', 'debug.log'))
@logger.debug(message)
end
end
class Post < ActiveRecord::Base
def initialize(attributes)
super(attributes)
@logger = Logger.new("#{Rails.root}/log/post.log")
end
def logger
@logger
end
def some_method
logger.info('Test 1')
end
end
ps = Post.new
ps.some_method
ps.logger.info('Test 2')
Post.new.logger.info('Test 3')