Wie unterscheiden Sie log4j-Sitzungen in einer Protokolldatei von Kopien derselben Web-App?

7

Es gibt nur eine Datei. Und es wird gleichzeitig geschrieben, während Web-App-Kopien ausgeführt werden.

Wie filtern Sie nur eine Sitzung Protokollmeldungen von anderen Protokollzeilen?

    
EugeneP 04.05.2010, 08:50
quelle

4 Antworten

12

Die Verwendung eines Servlet-Filters mit NDC- oder MDC-Informationen ist der beste Weg, den ich gesehen habe. Ein schneller Vergleich der beiden ist verfügbar unter Ссылка .

Ich habe festgestellt, dass MDC in der Vergangenheit besser für mich funktioniert hat. Denken Sie daran, dass Sie Ihre log4j-Eigenschaftendatei so aktualisieren müssen, dass sie die von Ihnen bevorzugte Version enthält (Musterdefinitionen unter Ссылка ).

Ein vollständiges Beispiel zum Konfigurieren von MDC mit einem Servlet-Filter finden Sie unter Ссылка .

Eine etwas einfacher zu konfigurierende, aber erheblich unterlegene Option: Sie können die Thread-ID (über die Eigenschaftendatei) für jede Anfrage einfach ausdrucken und sicherstellen, dass das erste, was Sie über jede Anfrage protokollieren, eine Sitzungskennung ist. Es ist nicht so richtig (oder nützlich), aber es kann für Anwendungen mit geringem Volumen funktionieren.

    
John D 04.05.2010, 13:15
quelle
5

Sie können eine Kontextnachricht mit dem Bezeichner der bestimmten App-Instanz mithilfe von festlegen org.apache.log4j.NDC , so:

%Vor%

Sie können den Kontext während der Initialisierung Ihrer Web-App-Instanz oder innerhalb der doPost() -Methode Ihrer Servlets einrichten. Wie der Name schon sagt, können Sie Kontexte auch in Kontexten mit mehreren push -Aufrufen auf verschiedenen Ebenen verschachteln.

Siehe Abschnitt "Verschachtelte Diagnosekontexte" im Log4J-Handbuch .

    
Péter Török 04.05.2010 08:53
quelle
2

Hier ist eine Seite, die einen MDC-Filter für Web-App einrichtet - & gt; Ссылка

Da es sich um einen Servlet-Filter handelt, können Sie MDC / NDC nicht in jedem Ihrer Servlets verwalten.

Natürlich sollten Sie es ändern, um Informationen zu speichern, die für Ihre Web-App relevant sind.

    
Alexander Pogrebnyak 04.05.2010 11:17
quelle
1

Wenn Sie Sitzungen in derselben Anwendung unterscheiden möchten, ist der MDC der richtige Weg. Wenn Sie jedoch die Webanwendungen unterscheiden möchten, die in dieselbe Datei schreiben, wird MDC nicht helfen, da es auf einer Thread-Basis funktioniert. In diesem Fall habe ich meinen eigenen Appender gemacht, der weiß, welche Anwendungsinstanz er bedient. Dies kann durch Appender-Konfigurationseigenschaften erfolgen. Ein solcher Appender würde den Anwendungsnamen in jedem Protokollierungsereignis als Eigenschaft vor dem Schreiben in das Medium festhalten, und dann können Sie ein Layout verwenden, um diesen Eigenschaftswert in der Textdatei anzuzeigen, in die geschrieben wird. Die Verwendung von MDC wird in diesem Fall nicht funktionieren, da jeder Thread MDC.put (applicationName) haben muss und das ist ziemlich hässlich. MDC eignet sich nur für einzelne Prozesse, nicht für mehrere Prozesse. Wenn jemand den anderen Weg kennt, würde ich gerne hören.

    
Dima 04.05.2010 17:09
quelle

Tags und Links