Comment puis-je configurer log4j pour ne pas imprimer l'exception stacktrace?
Nous utiliser Log4j (et Commons Logging) pour vous connecter à nos messages d'erreur. Maintenant, nous voulons créer un journal appender que les sorties des erreurs fatales à syslog, mais sans exceptionnellement longue Java stacktraces (ceux qui seront toujours disponibles dans le fichier journal complet).
Comment configurer ce (à l'aide de log4j.xml)? Est-il un filtre à ignorer les traces de la pile?
Un autre cas d'utilisation où l'on pouvait veux c'est lorsque vous êtes à l'exécution d'une suite de tests qui contiennent des tests négatifs qui devraient lancer des exceptions que nous avons toujours voulu le journal de la production. Nous ne voulons pas que notre test de journaux à être encombré avec des exceptions qui sont par pour le cours
OriginalL'auteur Thilo | 2008-12-08
Vous devez vous connecter pour publier un commentaire.
Edit après avoir lu un peu plus de la source:
Vous avez encore besoin de sous-classe PatternLayout, mais la méthode que vous souhaitez remplacer est ignoresThrowable(): elle doit retourner false, ce qui permettra d'éviter l'appender de l'écriture de la Throwable (il suppose que la mise en page est déjà fait).
Aucun moyen de le spécifier dans la configuration: PatternLayout a une codé en dur "return true".
C'est un peu étrange: quand j'ai regardé le code, j'ai pensé que les mises en page tout réglé, ensuite découvert que c'était en fait l'appender. Et que les appenders sont légèrement différentes. Si vous allez pour ce faire, vous pouvez ajouter une définition pour la ignoreThroable() et de soumettre un patch.
OriginalL'auteur
Voici le code que j'utilise:
OriginalL'auteur
Si vous utiliser log4j > 1.2.16, vous pouvez utiliser le EnhancedPatternLayout mise en page.
Exemple (avec un log4j.fichier de propriétés), de la définir comme la mise en page de votre appender, puis ajouter
%throwable{0}
dans la conversion, modèle:slf4j-log4j12
version1.7.12
(sous le capot à l'aide delog4j
version1.2.17
) c'est toujours la pleine JSONException 🙁 quelqu'un a une idée de pourquoi?OriginalL'auteur
Dans 1.2.16 vous pouvez utiliser EnhancedPatternLayout
OriginalL'auteur
La "nopex" ou "nopexception" conversion de word en logback-classique (log4j successeur) désactive l'impression traces de pile. Le "nopex" conversion word est décrite, de même que la reste de conversion de mots. Vous avez besoin de faire défiler vers le bas un peu.
Si vous avez besoin de plus amples informations sur ce sujet, veuillez contacter le logback-user mailing liste.
OriginalL'auteur
Vous pouvez avoir besoin d'écrire une mise en page personnalisée pour le faire (ce qui n'est pas si mal que ça à faire, vous pourriez sous-classe PatternLayout).
OriginalL'auteur
De Log4j2, vous pouvez simplement ajouter
"%ex{0}"
à votre journal motif (en supposant que vous êtes en utilisant PatternLayout)https://logging.apache.org/log4j/log4j-2.1/manual/layouts.html
OriginalL'auteur
Si vous pouvez modifier le code source, puis une autre option est disponible pour examen.
Dans mes applications, j'ai toujours et seulement le journal FATALE messages de mes applications point d'entrée (par exemple, "main()"), car je sais seulement qu'ils sont mortels si je suis sur le point de quitter l'application à cause d'eux.
Donc, dans ce seul endroit (ou poignée si vous avez de multiples points d'entrée), instancier un Log4j Enregistreur avec une classe spéciale ou MDC de "syslog" ou similaire. Lors de la capture d'un bientôt-à-être-erreur FATALE, journal de dans le de la manière habituelle (pour vos autres fichiers journaux), mais aussi d'invoquer la fatale() la méthode sur ce nouveau "syslog" Logger avec seulement le message précis que vous souhaitez (par exemple, seulement la classe d'exception et de message, mais sans la trace de la pile). Puis configurer Log4j diriger cette "syslog" de la classe ou de MDC nouvellement configuré Appender que les objectifs de la SysLog.
Ta-dum!
OriginalL'auteur