L'histoire a commencé quand j'ai voulu ajouter l'adresse IP des clients de mon application Web dans les logs. J'avais déjà configuré mon MDCInsertingServletFilter, il ne me restait qu'à utiliser ses informations. J'ai donc configuré le pattern dans le appender, avec un %X{...} et un peu de mise en forme. C'est ici que la parenthèse arrive, et les problèmes avec.
%d{HH:mm:ss.SSS} (%X{req.remoteHost}) [%thread] %-5level %logger - %msg%n
06:20:40.626 (81.56.227.22406:20:40.628 (81.56.227.22406:20:41.371 (81.56.227.22406:20:44.301 (81.56.227.22406:20:44.369 (81.56.227.22406:20:44.566 (81.56.227.22406:20:44.623 (81.56.227.22406:20:44.859 (81.56.227.22406:20:45.000 (81.56.227.22406:20:45.087 (81.56.227.22406:20:45.280 (81.56.227.22406:20:45.349 (81.56.227.22406:20:45.405 (81.56.227.22406:20:45.798 (81.56.227.22406:20:45.868 (81.56.227.22406:20:47.595 (81.56.227.22406:20:48.225 (81.56.227.22406:20:48.399 (81.56.227.22406:20:48.747 (81.56.227.22406:20:48.761 (81.56.227.22406:20:48.790 (81.56.227.22406:20:48.816 (81.56.227.22406:20:48.829 (81.56.227.22406:20:48.953 (81.56.227.22406:20:48.958 (81.56.227.22406:20:49.132 (81.56.227.22406:20:49.176 (81.56.227.22406:20:49.178 (81.56.227.22406:20:49.283 (81.56.227.22406:20:49.290 (81.56.227.22406:20:49.304 (81.56.227.22406:20:49.306 (81.56.227.22406:20:49.310 (81.56.227.22406:20:49.592 (81.56.227.22406:20:49.793 (81.56.227.22406:20:49.804 (81.56.227.224
C'est une répétition d'heures de d'adresses IP ; j'ai perdu tout ce qui était après l'adresse IP, même le retour à la ligne. Et ça, c'est dû à l'utilisation de la parenthèse fermante dans le pattern.
Après de longues recherches, je suis tombé sur le paragraphe des parenthèses dans la documentation de logback, qui explique très bien que les parenthèses ont un rôle spécial, pour grouper des éléments du pattern, et qu'il faut échapper les parenthèses qu'on veut simplement afficher. J'aurais donc dû mettre le pattern suivant :
%d{HH:mm:ss.SSS} \\(%X{req.remoteHost}\\) [%thread] %-5level %logger - %msg%n
Avec ce pattern, mes traces sont correctes, avec les bonnes informations issues du MDC et la mise en forme que je voulais.

Et en Log4j, le pb est le même ?
RépondreSupprimerNon, dans Log4J (1.2), il n'y a pas cette notion de regroupement. Donc la parenthèse est un caractère comme les autres.
SupprimerC'est d'ailleurs ce qui m'a piégé ; j'étais habitué à mettre cette config dans Log4J et je l'ai bêtement reportée dans logback.