Этот проект на codeplex проверяет почти любой тип свойства и может быть настроен по мере необходимости.
Можно создать объект Регистратора сами из любой модели. Просто передайте имя файла конструктору и используйте объект как обычные направляющие 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
Здесь я привык атрибут класса для memoize регистратор. Таким образом, это не будет создано для каждого Пользовательского объекта, который создается, но Вы не обязаны делать это. Помните также, что можно ввести my_logger
метод непосредственно в ActiveRecord::Base
класс (или в некоторый собственный суперкласс, если Вам не нравится обезьяне, исправляют слишком много) совместно использовать код между моделями Вашего приложения.
class Article < ActiveRecord::Base
LOGFILE = File.join(RAILS_ROOT, '/log/', "article_#{RAILS_ENV}.log")
def validate
log "was validated!"
end
def log(*args)
args.size == 1 ? (message = args; severity = :info) : (severity, message = args)
Article.logger severity, "Article##{self.id}: #{message}"
end
def self.logger(severity = nil, message = nil)
@article_logger ||= Article.open_log
if !severity.nil? && !message.nil? && @article_logger.respond_to?(severity)
@article_logger.send severity, "[#{Time.now.to_s(:db)}] [#{severity.to_s.capitalize}] #{message}\n"
end
message or @article_logger
end
def self.open_log
ActiveSupport::BufferedLogger.new(LOGFILE)
end
end