Существует ли единая система регистрации для Ruby? - PullRequest
4 голосов
/ 16 ноября 2010

Мне было интересно, существуют ли какие-либо действительно унифицированные системы журналирования, которые могут поддерживать отложенные задания Rails и и относительно просты в настройке.

Я хочу иметь возможность регистрироваться на том же сервере / файле для любого контекста выполнения в моем приложении (Rails, отложенные задания и т. Д.), Даже если я в данный момент не в контексте Rails.

Мне нравится регистратор Rails, но я не могу войти в него, пока работаю в Resque.Есть идеи?

Ответы [ 2 ]

6 голосов
/ 16 ноября 2010

Вы имеете в виду файл-логгер, похожий на syslog?

У Руби есть и Logger и Syslog.

Logger может выполнять ротацию журналов, обрабатывать уровни серьезности и используется во многих модулях Ruby для ведения журнала. Вы можете определить имя файла для входа или использовать STDOUT / STDERR или поток ввода-вывода.

Документация по syslog довольно проста, но вы можете получить информацию, просмотрев ее исходный код или прочитав Ruby Syslog README .

2 голосов
/ 13 января 2011

Я должен регистрировать события, происходящие в геме, который выполняется заданием resque. Для регистрации того, что происходит в базе данных Rails, я делаю следующее:

#in gem:
class Foo
  def self.logger
    @@logger ||= Logger.new(nil)
  end

  def self.logger=(logger)
    @@logger = logger
  end

  def self.logger_reset
    self.logger = Logger.new(nil)
  end

  def self.logger_write(obj_id, message, method = :info)
    self.logger.send(method, "|%s|%s|" % [obj_id, message])
  end
end

#in rails in initializers
Foo.logger = MyRailsLogger.new

#in in rails in lib or in model if it uses ActiveRecord
class MyRailsLogger
  def info
    ...
  end

  ...
end

Таким образом, я могу регистрировать события, происходящие в другом процессе, а также фильтровать журналы по object_id экземпляра Foo, поэтому регистрируются только соответствующие данные.

...