2012-04-10 14 views
3

Können wir zwei Instanzen von log4j in der ersten Klasse erstellen, um in eine Datei zu schreiben, und in jdbcadapter?Können wir zwei Instanzen von log4j erstellen?

// one to write log in console 
Logger log = Logger.getLogger(this.getClass()); 

// write in database within one class 
Logger log1 = Logger.getLogger(this.getClass()); 

Mein jdbc Adapter Meine Dateiadapter ist I wan Beispiel Protokoll-Logger für Datei anmd L ogger sofortiges log1 für jdbc.

+1

In Ihrem Beispiel tow Instanz ist das gleiche. – MJM

Antwort

3

In log4j sind verschiedene verfügbar, mit beschreibenden Namen wie FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, NTEventLogAppender and even SMTPAppender. Mehrere Appender können an jeden Logger angehängt werden, so dass es möglich ist, dieselben Informationen auf mehreren Ausgängen zu protokollieren; zum Beispiel zu einer Datei lokal und zu einem Socket-Listener auf einem anderen Computer.

Darüber hinaus, wenn Sie Protokolle zu verschiedenen Ausgängen entsprechend dem Niveau schreiben möchten, dann könnten Sie Log to appender by level versuchen.

+0

Meine Frage ist, ich möchte einige interne logische Prozess im Dateisystem und meine schreiben Anfrage und Antwort in der Datenbank. Ich kenne den Adapter wie oben beschrieben. In der einzelnen Klasse möchte ich einen in Datei und einen anderen in Datenbank schreiben. – Mallika

1

Dies funktioniert nur, wenn Sie dem zweiten Logger einen anderen Namen geben. Andernfalls enthalten beide Variablen die gleiche Instanz. Zum Beispiel:

Logger log = Logger.getLogger(this.getClass()); 
Logger log1 = Logger.getLogger(this.getClass().getName() + ".db"); 

Dann haben Sie zwei getrennte Logger.

+0

Ok @Nitram, wie Sie Adapter für diese – Mallika

1

Ich bin nicht sicher, ob das die Instanzen erstellt (oder die gleiche zwischengespeicherte zurückgibt), aber selbst wenn dies der Fall ist, wird es dieselbe Appender-Konfiguration haben (da derselbe Klassenname für die Kategorie verwendet wird).

Sie können zwei verschiedene Logger mit verschiedenen Kategorienamen erhalten:

Logger log = Logger.getLogger(this.getClass()); 

Logger log1 = Logger.getLogger(this.getClass().getName()+".extra"); 

Wo sie sich anmelden, um in log4j.properties konfiguriert ist.

Sie können auch das gleiche Loggerprotokoll für mehrere Appender verwenden, abhängig von Filtern wie der Priorität. Wenn Sie also in Ihrem Code keine komplexe Logik dazu haben, wo Sie wo protokollieren sollen, können Sie nur einen Logger verwenden und er kann trotzdem zu Datei und Datenbank gehen.

+0

schreiben Wie schreibe ich Adapter für log1-Instanz getrennt, wo es kein Protokoll für den Namen "log" – Mallika

Verwandte Themen