Quelle est la bonne approche pour consigner à la fois un message rempli et une trace de pile de l'exception?
logger.error(
"\ncontext info one two three: {} {} {}\n",
new Object[] {"1", "2", "3"},
new Exception("something went wrong"));
Je voudrais produire une sortie similaire à ceci:
context info one two three: 1 2 3
java.lang.Exception: something went wrong
stacktrace 0
stacktrace 1
stacktrace ...
slf4j version 1.6.1
{}
plus, la question du goût ...toString()
méthode des arguments peut être coûteuse. Avec cette syntaxe, seule une référence à chaque objet est transmise et latoString()
méthode n'est appelée que si le message particulier est réellement enregistré. Les objets référencés dans uninfo()
appel de journal ne verront pas leurtoString()
méthode appelée si le niveau de journal estWARN
supérieur ou égal à. La{}
syntaxe rappelle aux utilisateurs qu'il ne s'agit pas d'uneString.format()
opération de type similaire, c'est-à-dire qu'ils doivent passer des objets plutôt que des représentations de chaîne de ceux-ci.Réponses:
À partir de SLF4J 1.6.0, en présence de plusieurs paramètres et si le dernier argument d'une instruction de journalisation est une exception, alors SLF4J supposera que l'utilisateur souhaite que le dernier argument soit traité comme une exception et non comme un simple paramètre. Voir également l' entrée FAQ appropriée .
Donc, l'écriture (dans SLF4J version 1.7.x et ultérieure)
ou en écriture (dans SLF4J version 1.6.x)
donnera
La sortie exacte dépendra du framework sous-jacent (par exemple logback, log4j, etc.) ainsi que de la façon dont le framework sous-jacent est configuré. Cependant, si le dernier paramètre est une exception, il sera interprété comme tel quel que soit le cadre sous-jacent.
la source
Logger
classe javadoc: slf4j.org/apidocs/org/slf4j/Logger.htmlEn plus de la réponse de @Ceki, si vous utilisez logback et configurez un fichier de configuration dans votre projet (généralement logback.xml), vous pouvez définir le journal pour tracer également la trace de la pile en utilisant
le% ex dans le motif est ce qui fait la différence
la source