Rails: регистрация всей трассировки стека исключений - PullRequest
101 голосов
/ 14 августа 2010

Я пытался найти правильный способ записи трассировки стека. Я наткнулся на эту ссылку, в которой говорится, что logger.error $ !, $ !. backtrace - это путь, который у меня не работает log_error, Что касается документации, я не вижу, как передача второго аргумента методу error все равно будет работать, потому что регистратор ruby, который использует rails, принимает только один аргумент.

Странно (а может и нет) второй аргумент принимается без жалоб переводчика. Однако все, что я передаю, игнорируется.

Может кто-нибудь объяснить, что мне не хватает? Любое понимание того, для чего второй аргумент к ошибке и что его ест?

Ответы [ 2 ]

192 голосов
/ 15 августа 2010

Если вы посмотрите на источник класса BufferedLogger в ActiveSupport, вы увидите, что вторым аргументом является 'progname'.Это используется только в том случае, если первый аргумент равен nil, и вы либо дали ему блок, либо блок возвращает неверное значение.

По сути, вы не можете использовать второй параметр для вывода дополнительных вещей.

То, что вы хотите сделать, является чем-то более похожим на:

begin
  raise
rescue => e
  logger.error e.message
  logger.error e.backtrace.join("\n")
end

В зависимости от того, как у вас есть настройки логирования, может быть лучше перебрать каждую строку обратной трассировки и распечататьотдельно, поскольку некоторые регистраторы не выводят символы новой строки, в этом случае вы должны сделать что-то вроде:

begin
  raise
rescue => e
  logger.error e.message
  e.backtrace.each { |line| logger.error line }
end
12 голосов
/ 12 июня 2018

Это ответ.

begin
  raise
rescue => e
  logger.error ([e.message]+e.backtrace).join($/)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...