2009-07-17 7 views
8

Dans l'une de nos installations clients, nous avions des milliers d'occurrences de la même exception. Après un grand nombre de stacktraces correctement enregistrés (9332), l'occurrence de l'exception est toujours enregistrée, mais sans stacktrace. Après avoir redémarré le processus Java, la même chose: Cette fois, nous avions 17858 stacktraces et seulement l'occurrence d'exception elle-même.Pourquoi log4j désactive-t-il la trace de pile après (beaucoup de) répétition de la même exception?

Il y a une question similaire here, mais pas de réponse ...

Est-ce une fonction log4j ou bug? (Je crois dans le premier, parce que j'aime vraiment, ce que ces gars apache font)

Des idées?

Répondre

21

Utilisation de Java 5 ou supérieur?

Alors vous voyez:

Le compilateur dans le serveur VM fournit maintenant backtraces correct de la pile pour tous « froid » intégré des exceptions. À des fins de performances, lorsqu'une telle exception est levée plusieurs fois, la méthode peut être recompilée. Après la recompilation, le compilateur peut choisir une tactique plus rapide en utilisant des exceptions préallouées qui ne fournissent pas de trace de pile. Pour désactiver complètement l'utilisation des exceptions préalloués, utilisez ce nouveau drapeau: -XX:-OmitStackTraceInFastThrow

Avec l'aimable autorisation de l'Java 5 release notes.

+0

Merci. Cela semble être la bonne réponse et je vais vérifier cela et ensuite accepter cela comme la bonne. –

+0

Les notes de publication ne sont plus accessibles, la dernière capture archivée que j'ai trouvée provient de [2012-06-27] (http://web.archive.org/web/20120627040457/http://java.sun.com/j2se /1.5.0/relnotes.html). Même si je voulais vérifier la source d'origine, la citation de l'article connexe est complète. – vilpan

1

Cela me semble être une caractéristique, du moins si les traces de la pile sont vraiment identiques. Pourquoi voudriez-vous agrandir vos logs (et donc plus difficile à chercher) sans avoir plus d'informations? Va vérifier pour la configurabilité de cette fonctionnalité ...

EDIT: J'ai jeté un coup d'oeil à travers le code log4j et il n'y a aucune trace de celui-ci. Cela suggère fortement que la réponse de Robert est correcte. Nice VM feature IMO :)

+0

Merci pour la réponse. Je ne veux pas rendre mes fichiers journaux volumineux (et j'aime la fonctionnalité - même si c'est un bug ...). Le problème était, que j'ai d'abord vu ces entrées de journal sans trace de pile (et ne pensais même pas qu'il pourrait y en avoir d'autres) ce qui n'était pas très utile quand j'ai essayé de trouver le bogue dans mon code. –

Questions connexes