J'essaie de limiter la profondeur de la pile d'exception quand je suis connecté depuis un endroit spécifique du code. A la suite http://logging.apache.org/log4j/2.x/manual/layouts.html#Pattern_Selectors ma configuration ressemble à ceci (élément clé):Pourquoi cette configuration de MarkerPatternSelector dans Slf4j + Log4j2 ne fonctionne pas?
<PatternLayout>
<MarkerPatternSelector defaultPattern="%d{dd MMM yyyy HH:mm:ss,SSS}: %m%n">
<PatternMatch key="ExceptionInterceptor"
pattern="%d{dd MMM yyyy HH:mm:ss,SSS}: %m%throwable{5}%n" />
</MarkerPatternSelector>
</PatternLayout>
Dans le code Java:
@Slf4j
public final class ExceptionInterceptor {
private static final Marker MARKER = MarkerFactory.getMarker("ExceptionInterceptor");
public void intercept(Throwable t) {
log.info(MARKER, "Got exception", t);
}
Et pourtant, pour une raison quelconque le marqueur ne semble pas correspondre, à savoir que je reçois plein pile enregistrée. Lorsque j'ajoute %throwable{5}
à l'attribut defaultPattern
, la pile est tronquée comme prévu.
Voici le journal DEBUG pertinent au démarrage (timestamps &). Si je le lis correctement, il semble construire le matcher ok.
Building Plugin[name=PatternMatch, class=org.apache.logging.log4j.core.layout.PatternMatch]. Searching for builder factory method...
Found builder factory method [newBuilder]: public static org.apache.logging.log4j.core.layout.PatternMatch$Builder org.apache.logging.log4j.core.layout.PatternMatch.newBuilder().
Calling build() on class class org.apache.logging.log4j.core.layout.PatternMatch$Builder for element PatternMatch with params(, key="ExceptionInterceptor", pattern="%d{dd MMM yyyy HH:mm:ss,SSS}: %m%throwable{5}%n")
Built Plugin[name=PatternMatch] OK from builder factory method.
Building Plugin[name=patternSelector, class=org.apache.logging.log4j.core.layout.MarkerPatternSelector]. Searching for builder factory method...
No builder factory method found in class org.apache.logging.log4j.core.layout.MarkerPatternSelector. Going to try finding a factory method instead.
Still building Plugin[name=patternSelector, class=org.apache.logging.log4j.core.layout.MarkerPatternSelector]. Searching for factory method...
Found factory method [createSelector]: public static org.apache.logging.log4j.core.layout.MarkerPatternSelector org.apache.logging.
log4j.core.layout.MarkerPatternSelector.createSelector(org.apache.logging.log4j.core.layout.PatternMatch[],java.lang.String,boolean,boolean,org.apache.logging.log4j.core.config.Configuration).
Qu'est-ce qui ne va pas avec ce code au-delà duquel le marqueur ne correspond pas?
Vous aviez raison. J'utilisais Log4j 2.4, après avoir mis à jour vers 2.6, le problème est parti. Je vous remercie! – alexandroid
Vous voudrez peut-être passer à la version 2.8, car beaucoup, beaucoup de bugs ont été corrigés depuis 2.6 ... :-) –