Rails: journalisation de la trace de stack complète d’une exception

J’ai essayé de trouver la bonne façon de consigner une trace de stack. Je suis tombé sur ce lien qui indique que logger.error $ !, $ !. backtrace est la voie à suivre, mais cela ne fonctionne pas pour moi. Selon la documentation, je ne vois pas comment le passage d’un second argument à la méthode de l’erreur fonctionnerait de toute façon parce que l’enregistreur Ruby qui utilise les rails n’accepte qu’un seul argument.

Étrangement (ou peut-être pas) le deuxième argument est accepté sans aucune plainte d’interprète. Cependant, tout ce que je lui passe est ignoré.

Quelqu’un peut-il expliquer ce qui me manque? Un aperçu de ce qu’est le second argument à l’erreur et qu’est-ce que c’est de le manger?

Si vous examinez la source de la classe BufferedLogger dans ActiveSupport, vous verrez que le deuxième argument est «progname». Ceci est utilisé uniquement lorsque le premier argument est nul et que vous ne lui avez donné aucun bloc ou que le bloc retourne une valeur non vraie.

En résumé, vous ne pouvez pas utiliser le second paramètre pour afficher des éléments supplémentaires.

Ce que vous voulez faire est quelque chose de plus proche de:

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

En fonction de la configuration de votre journalisation, il peut être préférable de parcourir chaque ligne de la trace et de l’imprimer séparément, car certains enregistreurs ne génèrent pas de nouvelles lignes, auquel cas vous feriez quelque chose comme:

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

C’est la réponse.

 begin raise rescue => e logger.error ([e.message]+e.backtrace).join($/) end