Автоматическая регистрация исключений в Ruby

Есть ли библиотека или простой способ поймать исключения, брошенные в программу Ruby и зарегистрировать ее в файле? Я просмотрел log4r и logger, но документы на обоих не дают никаких примеров того, как я буду это делать. Я запускаю эту программу удаленно и теряю дескрипторы в stdout и stderr, если эта информация вообще помогает.

Что вы порекомендовали бы?

Ответ 1

Если вы хотите прогуляться по дикой стороне, попробуйте следующее:

class Exception
  alias real_init initialize
  def initialize(*args)
    real_init *args
    # log the error (self) or its args here
  end
end

Это приведет к перехвату создания новых объектов исключений в момент создания.

Ответ 2

Спасение с Exception. Что-то вроде этого, вероятно, имеет смысл:

begin
  # run your code here ..
rescue Exception => exception
  # logger.error(...) ....
  raise exception
end

Это будет регистрировать исключение и повторно поднимать его, чтобы приложение действительно вызывало ошибку в дополнение к протоколированию.

Exception является экземпляром Exception, посмотрите документы для получения информации о том, что вы можете сделать с этим объектом (например, доступ к обратному каналу).

Ответ 3

Если вы используете приложение Rails, плагин Notification Notification очень удобен.

Ответ 4

Будет ли это работать, если я сделаю что-то вроде этого:

begin
  main()
rescue Exception => e
  myCustomErrorLogger(e)
end

def main()
  # All the application code comes here.
end

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

Я пробую это сейчас, но было бы здорово, если бы у вас были ваши предложения.

Ответ 5

Вы можете настроить код класса Exception в части, которая ставит в основу причины и обратную трассировку.

Не забудьте проверить, может ли журнал быть пустым, исключение может быть выбрано до (или пока) созданного журнала.