Log4j - Lassen Sie mehrere Appender in dieselbe Datei schreiben, wobei immer eine protokolliert wird

8

Ich habe einen log4j Appender definiert wie:

%Vor%

In meiner Klasse bekomme ich den Logger gerne:

%Vor%

Dies funktioniert ordnungsgemäß. Ich möchte einen Logger haben, der immer bestimmte Nachrichten protokolliert (keine Fehler, sondern Dinge wie lange Transaktionen). Wenn ich diese bei DEBUG oder INFO schreibe, sehe ich sie nicht, wenn der Log-Level geändert wird. Ich denke, dass ich dies mit einem anderen Appender erreichen kann, der in dieselbe Datei schreibt.

Ist es möglich, dass zwei Appender in dieselbe Datei schreiben? Wie bekomme ich die Logger-Instanz, in der ich den normalen Debug-Appender und den transaktionalen Appender in derselben Klasse verwenden möchte? Diese Nachrichten befinden sich nicht alle im selben Paket, daher kann ich ein bestimmtes Paket nicht so konfigurieren, dass es immer protokolliert. Muss ich diese Appender in verschiedene Dateien schreiben lassen, oder kann ich sie beide im Code abrufen und habe so etwas wie:

%Vor%

Aktualisieren Ich könnte bei Bedarf in zwei verschiedene Protokolldateien schreiben, aber wie würde ich die Loggerinstanz in meiner Klasse bekommen? Ich möchte nicht ein Paket / eine Klasse konfigurieren, um immer einen Appender über dem anderen zu verwenden, da die Klassen Informationen / Fehlermeldungen und die transaktionalen "Immer" -Meldungen während eines normalen Laufs protokollieren müssen. Gibt es einen Weg, um zu erreichen, was ich brauche, selbst wenn es in zwei verschiedene Protokolldateien schreibt?

    
David Buckley 28.10.2010, 20:16
quelle

4 Antworten

6

Ich glaube nicht, dass log4j wirklich zwei Appender unterstützt, die aufgrund von Synchronisationsproblemen in dieselbe Datei schreiben. Am besten wäre es, wenn möglich, mit slf4j zu wechseln. ch / index.html "> Logback als Ihr Backend-Logging-System, da Logback der Nachfolger von log4j ist und auch mehrere Appender unterstützt, die in eine Datei schreiben. Schauen Sie sich FileAppender an und es ist vorsichtiger Modus.

Update: von Ihrer Beschreibung, es scheint, Sie sollten auch Markierungen . Sie brauchen nur eine Logger-Instanz, und Sie können eine feinkörnigere Kontrolle mit Markern erhalten, weil Sie bei ihnen grundsätzlich sagen: "Diese Log-Anweisung hat einen besonderen Zweck und muss mit einem geeigneten Appender protokolliert werden". Sie können auch log überprüfen appender additivity , die in der Regel verwendet, wenn Sie zwei oder mehr Appen verwenden für ein Protokoll Aussage.

    
darioo 28.10.2010 21:34
quelle
2

Soweit ich weiß, ist die Instanziierung von Loggern mit einem Paket & amp; Klassenbezeichner ist nur eine Konvention. Sie können mehrere Logger-Instanzen in jeder Klasse erstellen und ihnen einen beliebigen Bezeichner geben.

%Vor%

Was das Schreiben in dieselbe Datei betrifft, habe ich es nicht versucht, aber es sollte möglich sein, zumindest von einem einzigen Thread. Möglicherweise müssen Sie Ihren eigenen Appender schreiben, anstatt sich auf einen der Standardapplikationen zu verlassen.

    
Synesso 28.10.2010 21:57
quelle
0

Ich habe das mit AsyncAppender s geschafft. Ich hatte meinen Hauptappender, der eine Datei anmeldete, zu der sich anmelden sollte, und hatte meine anderen Appender darauf beziehen.

z.B.

%Vor%

Sie können andere Filter oder was auch immer den anderen Appendern hinzufügen. Soweit ich das mit meiner eigenen App feststellen kann, scheinen die Logs zu rollen und die Appender-Filter funktionieren wie erwartet.

    
Fodder 30.07.2015 10:46
quelle
-1

Ja. Sie können "umgehen", um 2 Appender in dieselbe Datei schreiben zu lassen.

Überprüfen Sie dieses Code + Beispiel :

Irgendwelche Fragen willkommen.

    
Andrés 23.10.2013 14:53
quelle

Tags und Links