2012-12-24 18 views
13

Kann eine Liste aller in log4j zur Laufzeit konfigurierten Appender abgerufen werden?Liste der Log4J Appender zur Laufzeit abrufen

Ich werde das Szenario ein wenig mehr ausfüllen. Mit der folgenden Konfiguration wie würde ich alle Appender (stdout und altstdout) abrufen?

log4j.rootLogger=error, stdout 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 

log4j.appender.altstdout=org.apache.log4j.ConsoleAppender 
log4j.appender.altstdout.layout=org.apache.log4j.PatternLayout 

# Pattern to output the caller's file name and line number. 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
log4j.appender.altstdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 
+0

Zugriff auf die Appletwurzeln der RootLogger haben. Verwenden Sie lo4j 1.2 oder log4j2? Taggen ist verwirrend, da sie unterschiedliche APIs haben. – Simulant

Antwort

11

benötigen Wenn Sie den Zugriff auf alle Appender für alle Logger konfiguriert wollen Sie so etwas wie dieses

for (Enumeration loggers=LogManager.getCurrentLoggers(); loggers.hasMoreElements();) { 
    Logger logger = (Logger) loggers.nextElement(); 
    for (Enumeration appenders=logger.getAllAppenders(); appenders.hasMoreElements();) { 
     Appender appender = (Appender) appenders.nextElement(); 
     ... 

tun muss ich nicht tun weiß warum log4j hat keine Methode wie LogManager.getAllAppenders(), aber es sieht wie
Nachteil aus.

+0

Das würde funktionieren, aber es war nicht wirklich relevant für unsere Bedürfnisse. Ich habe eine Logging-Konfigurations-App erstellt, um Logger dynamisch erstellen und ändern zu können. Dies erforderte im Wesentlichen Appentoren, die derzeit nicht verwendet wurden. Am Ende habe ich einen Logger erstellt, der mit allen Appendern konfiguriert war und immer auf OFF gesetzt war. – binarymelon

+3

Dies funktioniert möglicherweise für log4j, aber definitiv nicht für log4j2, da in log4j2 weder LogManager.getCurrentLoggers() noch Logger.getAllAppenders() existiert. – Joe

+1

also wie machst du das in log4j2 –

0

Ich möchte etwas hinzufügen, das mich eine Weile brauchte, um zu verstehen. Wenn Sie die folgende Abbildung betrachten (die ich von here kopiert habe), können Sie sehen, dass, obwohl der Logger com.foo.bar an den Root-Logger FileAppender druckt, seine Appender-Liste immernoch null ist. Sie können also nicht alle Appender erhalten, mit denen der Logger mit der Methode logger.getAllAppenders() schreibt.

enter image description here

Dazu müssen Sie auch alle Eltern zu durchlaufen und die Wurzel Logger separat. Weil Sie logger.getParent() nicht zum Root-Logger iterieren können (Root-Logger gibt null zurück - siehe Dokumentation von getParent()). Soweit ich weiß, müssen Sie separat über Logger.getRootLogger().getAllAppenders().

Verwandte Themen