2012-06-28 17 views
37

Ich hätte gerne zwei verschiedene log4j Logger in meiner Anwendung, und da es keine "Überschneidung" zwischen den Inhalten gibt, die sie in ihre Protokolle schreiben.log4j.properties Datei - mehrere Logger in der gleichen Klasse

Zum Beispiel:

  • Logger1 schreibt Ereignisse INFO auf einen Satz von Systemereignissen im Zusammenhang
  • Logger2 schreibt Ereignisse INFO zu einem anderen Satz von Systemereignissen im Zusammenhang
  • Kein Eintrag im Protokoll zweimal erscheinen sollte

Mein log4j.properties ist wie folgt:

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Mein Java-Code ist wie folgt:

public static void main(String[] args) { 
    PropertyConfigurator.configure(Client.class 
      .getResource("/log4j.properties")); 
    xdasLogger = Logger.getLogger("xdasLogger"); 
    logger = Logger.getLogger(Client.class); 

    logger.info("normal"); 
    xdasLogger.info("xdas"); 
} 

Aber meine Konsolenausgabe ist wie folgt:

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 
xdas 

Beachten Sie, dass "XDAS" sowohl logger angemeldet ist und xdasLogger, was unerwünscht ist.

Weiß jemand, welche Änderungen ich in meine log4j.properties einfügen muss, um die Konsolenausgabe zu ändern?

normal 
2012-06-28 09:52:44,580 INFO xdasLogger - xdas 

Solution (ab akzeptierte Antwort genommen):

log4j.rootLogger=DEBUG, stdout 
log4j.logger.org.apache=DEBUG, stdout 
log4j.logger.xdasLogger=DEBUG, xdas 

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%m%n 

log4j.appender.xdas=org.apache.log4j.ConsoleAppender 
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout 
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n 

Antwort

41

Versuchen Sie, die Additivität der Logger auf false setzen. Dies verhindert die Weitergabe an den RootLogger.

log4j.additivity.org.apache=false 
log4j.additivity.xdasLogger=false 
+0

Ihre Lösung scheint absolut korrekt, funktioniert aber nicht für mich. Ich habe diese Zeilen zu '/ etc/spark/conf/log4j.properties' hinzugefügt, ist das nicht korrekt? Muss ich 'Spark' neu starten (oder irgendetwas anderes zurücksetzen), damit aktualisierte Eigenschaften aufgenommen werden? –

+0

Haben Sie die Protokollnamen verwendet, die bereits in der Datei log4j.properties für Spark konfiguriert sind? Oder vielleicht verwendet Spark log4j2, das eine andere Eigenschaftendatei hat - log4j2.properties? Wenn Sie mehr Details geben können, kann ich versuchen zu helfen – kjp

+0

** @ kjp ** so weit ich weiß, "Spark 2.3.0" (veröffentlicht am 28. Februar 2018) verwendet immer noch 'log4j' wie gesagt [hier] (https : //spark.apache.org/docs/latest/configuration.html#configuring-logging). Was meinen Sie mit * "Loggernamen, die bereits in der log4j.properties für Spark konfiguriert sind" *? In den 'log4j.properties' Dateien sehe ich Zeilen wie diese' log4j.rootCategory = WARN, console' & 'log4j.appender.console = org.apache.log4j.ConsoleAppender' –

Verwandte Themen