140 votes

Rails: l'enregistrement de la totalité de la trace de la pile d'une exception

J'ai essayé de trouver la bonne manière d'enregistrer une trace de la pile. Je suis tombé sur ce lien qui indique que l'enregistreur.erreur $!, $!.backtrace est le chemin à parcourir mais qui ne fonctionne pas pour moi log_error . Selon la documentation, je ne vois pas comment passer le deuxième argument de l'erreur de la méthode de travail de toute façon parce que le rubis enregistreur de rails utilise uniquement accepte un seul argument.

Étrangement (ou pas) le deuxième argument est accepté sans aucun interprète des plaintes. Cependant rien que je passe à il est ignoré.

Quelqu'un peut-il expliquer ce que je suis absent? Aucune idée de ce que le deuxième argument de l'erreur est et de quoi est-il manger?

243voto

darkliquid Points 1570

Si vous regardez le code source pour le BufferedLogger classe dans ActiveSupport, vous verrez que le second argument est 'nom_du_programme'. Il est utilisé uniquement lorsque le premier argument est nul et vous avez donné aucun bloc ou le bloc de retour d'une non-valeur véritable.

En essence, vous ne pouvez pas utiliser le deuxième paramètre de sortie d'autres choses.

Ce que vous voulez faire est quelque chose de plus semblable à:

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

Selon la configuration de votre journalisation de la configuration, il peut être préférable pour itérer sur chaque ligne de la trace et de l'imprimer séparément comme certains enregistreurs de ne pas émettre de nouvelles lignes, dans ce cas, vous feriez quelque chose comme:

begin
  raise
rescue => e
  logger.error e.message
  e.backtrace.each { |line| logger.error line }
end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X