74 votes

Comment puis-je arrêter la troncature de stacktraces dans les journaux

Beaucoup de fois dans les journaux Java, je vais obtenir quelque chose comme:

 Caused by: java.sql.BatchUpdateException: failed batch
    at org.hsqldb.jdbc.jdbcStatement.executeBatch(jdbcStatement.java:1102)
    at org.hsqldb.jdbc.jdbcPreparedStatement.executeBatch(jdbcPreparedStatement.java:514)
    at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48)
    at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
    ... 113 more
 

Est-ce que quelqu'un sait comment obtenir le stacktrace complet (c.-à-d. Montrer les 113 autres lignes)?


Les JavaDocs (pour Java 7) pour Throwable ont une explication assez détaillée de ce qui se passe.

74voto

Cowan Points 17235

Lorsque vous voyez «... 113 autres», cela signifie que les lignes restantes de l'exception «causée par» sont identiques aux lignes restantes à partir de ce point de l'exception parent.

Par exemple, vous aurez

 com.something.XyzException
  at ...
  at ...
  at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:242)
  at ... <the other 113 lines are here>...
Caused by: <the above>.
 

Les deux traces de pile "se rencontrent" sur AbstractBatcher.executeBatch, ligne 242, puis à partir de là, la trace d'appel ascendante est identique à l'exception d'emballage.

20voto

Hes Siemelink Points 321

Apache Commons Lang offre une belle util méthode ExceptionUtils.printRootCauseStackTrace() qui imprime un imbriquée stacktrace 'à l'envers'. Le résultat est beaucoup plus intuitive.

Si vous voyez le résultat suivant à l'origine de la printStackTrace() la méthode, il sera clair d'où le " 113 plus les lignes sont allés.

-2voto

MartinGrotzke Points 1050

Dans un article de blog, je viens de décrire comment obtenir plus que simplement "BatchUpdateException: batch failed" : définissez hibernate.jdbc.factory_class=org.hibernate.jdbc.NonBatchingBatcherFactory pour désactiver le traitement par lots en veille prolongée. Normalement, on peut utiliser BatchUpdateException.getNextException pour obtenir la raison de l'échec, mais dans certains cas, cela peut renvoyer null . Ensuite, il est utile de désactiver complètement le traitement par lots.

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