9
votes

Comment différenciez-vous les sessions log4j dans un fichier journal des copies de la même application Web?

Il n'y a qu'un seul fichier. Et il est écrit simultanément en tant qu'appopeau d'applications Web.

Comment filtrez-vous seulement un seul message de journal de session d'autres lignes de journalisation?


2 commentaires

Pas sûr de comprendre votre question. Vous voulez un fichier (log) par session Web?


@skaffman Tomcat 6. @bert Tout est écrit dans un seul fichier, de toutes les sessions. Je veux entendre des approches différentes de la manière dont vous traitez avec cela.


4 Réponses :


6
votes

Vous pouvez définir un message de contexte comprenant l'identifiant de l'instance d'application spécifique à l'aide de org.apache.log4j.ndc , comme ceci: xxx

Vous pouvez configurer le contexte lors de l'initialisation de l'instance d'application Web, ou à l'intérieur de la < Code> dopost () méthode de vos servlets. Comme son nom l'indique, vous pouvez également nier des contextes dans des contextes avec plusieurs appels appuyez sur les appels à différents niveaux.

Voir la section "Contextes diagnostiques imbriqués" dans le manuel log4j .


0 commentaires

2
votes

Voici une page qui configure un filtre MDC pour web-app -> http: // rtner .de / logiciel / mdcusersservletfilter.html

Être un filtre de servlet, il vous libérera de gérer MDC / NDC dans chacun de vos servlets.

Bien sûr, vous devez le modifier pour enregistrer des informations plus pertinentes pour votre application Web.


0 commentaires

13
votes

L'utilisation d'un filtre de servlet avec des informations de NDC ou de MDC est la meilleure façon que j'ai vue. Une comparaison rapide des deux est disponible chez http://wiki.apache.org/logging-log4j/ NDCVSMDC .

J'ai trouvé que MDC a travaillé mieux pour moi dans le passé. N'oubliez pas que vous devrez mettre à jour votre fichier de propriétés Log4J pour inclure la version que vous préférez (définitions de motif sur http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/patternlayout.html ).

Un exemple complet de configuration de MDC avec un filtre de servlet est disponible sur http://veerasundar.com/blog/2009/11/log4j-mdc-mapappe-Diagnostic-Context-example-code/ .

Un peu plus facile à configurer, mais de manière significative d'une option inférieure inférieure: vous pouvez choisir d'imprimer l'ID de thread (via le fichier de propriétés) pour chaque demande et assurez-vous que la première chose que vous vous connectez sur chaque requête est un identifiant de session. Ce n'est pas aussi approprié (ni utile), mais cela peut fonctionner pour des applications à faible volume.


0 commentaires

1
votes

Si vous souhaitez différencier des sessions dans la même application, le MDC est la voie à suivre. Mais si vous souhaitez différencier les applications Web écrivant dans le même fichier, MDC ne vous aidera pas, car cela fonctionne sur une base de thread. Dans ce cas, j'avais l'habitude de faire mon propre appendeur qui sait quelle instance d'application qu'elle sert. Cela peut être fait via les propriétés de la configuration du Appender. Un tel appendenderait le nom de l'application dans chaque événement de journalisation en tant que propriété avant de l'écrire dans le support, puis vous pouvez utiliser une mise en page pour afficher cette valeur de propriété dans le fichier texte qu'il écrit. L'utilisation de MDC dans ce cas ne fonctionnera pas car chaque thread aura à MDC.put (ApplicationName) et c'est assez laid. MDC n'est que bon pour le processus unique, pas pour plusieurs processus. Si quelqu'un connaît l'autre moyen, j'aimerais entendre.


0 commentaires