Как записать что-то в Rails в отдельный файл журнала?

Этот проект на codeplex проверяет почти любой тип свойства и может быть настроен по мере необходимости.

145
задан akshat 3 December 2008 в 16:24
поделиться

2 ответа

Можно создать объект Регистратора сами из любой модели. Просто передайте имя файла конструктору и используйте объект как обычные направляющие 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 класс (или в некоторый собственный суперкласс, если Вам не нравится обезьяне, исправляют слишком много) совместно использовать код между моделями Вашего приложения.

172
ответ дан Thiago Arrais 3 December 2008 в 16:24
поделиться
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  
2
ответ дан 23 November 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: