Question

J'ai un correcteur qui souhaite que seuls les X premiers caractères (pour cet exemple, disons 5) du message soient affichés.

J'utilise un PatternLayout mais je ne peux pas obtenir le message pour le tronquer correctement.

Par exemple, si mon message de journal est

  

Le renard brun rapide

Je veux juste voir:

  

Le q

Quand j'utilise ceci dans le motif

  

%. 5m

je reçois

  

n renard

puisque ce sont les 5 derniers caractères.

J'ai consulté le PattenLayout . javadoc, mais n'a rien trouvé. Je sais que c'est un peu étrange de ne pas vouloir voir le message en entier, mais pour cet appender spécifique, cela a du sens. Je me connecte le message entier dans un appender différent. J'aimerais éviter d'écrire une classe personnalisée si possible.

Était-ce utile?

La solution

La troncature est effectuée depuis le début du message par défaut (diffère de printf en C, qui le fait depuis la fin).

Le modèle approprié doit être:

%.-5m

EDIT:

Je viens d'essayer cela, et log4j n'aime pas ce motif. Cependant, le modèle fourni fonctionnera correctement dans LOGBack, si vous pouvez effectuer la permutation. Si vous ne pouvez pas changer de fournisseur de journalisation, vous pouvez apporter une modification unique à log4j. Le morceau de code intéressant apparaît sur les lignes 75 à 76 de org.apache.log4j.helpers.PatternConverter:

if(len > max)
  sbuf.append(s.substring(len-max));

Ceci devrait se lire:

if(len > max)
  sbuf.append(s.substring(0,max));

Vous pouvez simplement effectuer la modification et recompiler le fichier jar pour votre usage, ou vous pouvez sous-classe PatternConverter pour effectuer la troncature appropriée. Cela nécessitera également une nouvelle version de PatternLayout, contenant la méthode createPatternParser, que vous devrez remplacer dans votre sous-classe pour instancier votre nouvelle version de PatternConverter.

Notez également que la modification du code source ouvert dans votre projet spécifique nécessite une licence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top