log4j-DEBUG-Meldungen aus externen jar's unterdrücken

lubu

Mitglied
Hi,

ich implementiere gerade eine Methode zur Ausgabe von Formates Objects in's PDF Format. Im Rahmen dessen verwende ich etliche Jars von Apache-FOP. In meiner Anwendung sind für den Test mittels log4j DEBUG-Meldungen aktiviert.

Ich habe jetzt das Problem, dass eine Unmenge von DEBUG-Ausgaben durch die Apache-FOP-Jars erzeugt werden, da die log4j.properties-Datei den Log-Level mit DEBUG verwendet. Das ist langsam und erzeugt im Logfile auch entsprechend viele unübersichtliche Einträge.

Code:
DEBUG [Thread-34] (org.apache.fop.util.ContentHandlerFactoryRegistry:ContentHandlerFactoryRegistry.java:108) - Dynamically adding ContentHandlerFactory: org.apache.fop.render.afp.extensions.AFPExtensionHandlerFactory
DEBUG [Thread-34] (org.apache.fop.util.ContentHandlerFactoryRegistry:ContentHandlerFactoryRegistry.java:108) - Dynamically adding ContentHandlerFactory: org.apache.fop.render.ps.extensions.PSExtensionHandlerFactory
usw.

Das sind Zehntausende von Zeilen nach einer Konvertierung von fo nach pdf.

Gibt es eine Möglichkeit das für externe Jars abzuschalten?

Folgenden Versuch habe ich unternommen:

Code:
boolean bLogDebug = false;
// prüfen ob DEBUG und sonst auf anderen Level setzen
if (log.isDebugEnabled()){
    log.setLevel(Level.INFO);
    bLogDebug = true;
}
Fo2Pdf fo2Pdf = new Fo2Pdf();
try{
    fo2Pdf.convert(new File(strResultTransformFileFoOut), new File(strResultTransformFilePdfOut));
}
catch (Exception e){
    log.debug(e.getMessage());
}
// wenn vorher DEBUG dann wieder setzen
if (bLogDebug) {
    log.setLevel(Level.DEBUG);
}

Das Setzen des Levels bezieht sich aus meiner Sicht nur auf die aktuelle Klasse. Jedenfalls hat es keine Wirkung gezeigt.

Wenn ich generell den Level in der log4j.properties auf einen anderen Wert setze, hat das natürlich schon die Konsequenz, dass das auch die externen Jars beachten, aber dann sehe ich nicht gewünschten DEBUG-Meldungen aus meinen Klassen.

Weiß da jemand Rat?

Tschau
Lutz
 
Hi,

vielen Dank für den Hinweis.

Ich habe jetzt in meiner log4j.properties folgende Zeilen aufgenommen:

Code:
log4j.logger.org.apache=WARN
log4j.logger.javax.xml=WARN

Damit werden dann keine DEBUG-Meldungen mehr aus den externen Jars aufgenommen.

Tschau Lutz
 
Kleiner hinweis noch. Im Normalfall setzt man den Rootlogger auf WARN oder ERROR und legt dann explizit die Packages fest, die man geloggt haben will. Das ist meist einfacher und sauberer. Quasi Whitelist im Gegensatz zu Blacklist.

REINHAUN!
 
Zurück