Автоматическая регистрация исключений в Ruby - PullRequest
6 голосов
/ 20 апреля 2009

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

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

Ответы [ 5 ]

14 голосов
/ 20 апреля 2009

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

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

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

4 голосов
/ 20 апреля 2009

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

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

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

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

2 голосов
/ 20 апреля 2009

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

0 голосов
/ 06 марта 2011

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

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

0 голосов
/ 09 августа 2009

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

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

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

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

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

...