Wie initialisiere ich log4j richtig?

Nachdem ich log4j zu meiner Anwendung hinzugefügt habe, erhalte ich jedes Mal, wenn ich meine Anwendung ausführe, die folgende Ausgabe:

log4j:WARN Es konnten keine Appenders für den Logger (slideselector.facedata.FaceDataParser) gefunden werden.
log4j:WARN Bitte initialisieren Sie das log4j-System ordnungsgemäß.

Es scheint, dass dies bedeutet, dass eine Konfigurationsdatei fehlt. Wo sollte sich diese Konfigurationsdatei befinden und was ist ein guter Startinhalt?

Ich verwende einfaches Java für die Entwicklung einer Desktop-Anwendung. Also kein Webserver usw...

Lösung

Log4j sucht standardmäßig nach einer Datei namens log4j.properties oder log4j.xml auf dem Klassenpfad. Sie können steuern, welche Datei zur Initialisierung verwendet wird, indem Sie die Systemeigenschaften wie hier beschrieben einstellen (siehe Abschnitt "Standardinitialisierungsverfahren").

Zum Beispiel:

java -Dlog4j.configuration=customName ....

veranlasst log4j, im Klassenpfad nach einer Datei namens customName zu suchen.

Wenn Sie Probleme haben, finde ich es hilfreich, die log4j.debug zu aktivieren:

-Dlog4j.debug

Es gibt in System.out viele hilfreiche Informationen darüber aus, welche Datei zur Initialisierung verwendet wurde, welche Logger / Appenders wie konfiguriert wurden usw.

Die Konfigurationsdatei kann eine Java-Eigenschaftsdatei oder eine Xml-Datei sein. Hier ist ein Beispiel für das Format der Properties-Datei aus der log4j Intro-Dokumentationsseite:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.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.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Kommentare (5)

Suchen Sie online eine log4j.properties oder log4j.xml, die einen Root-Appender enthält, und legen Sie sie in Ihren Klassenpfad.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

wird auf der Konsole protokolliert. Ich ziehe es vor, in eine Datei zu protokollieren, so dass Sie dies später untersuchen können.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

obwohl für ausführliche Logging-Anwendungen 100KB normalerweise auf 1MB oder 10MB erhöht werden müssen, besonders für Debugging.

Ich persönlich richte mehrere Logger ein und setze den Root-Logger auf Warn- oder Fehlerstufe statt auf Debug.

Kommentare (0)

Womit entwickeln Sie? Verwenden Sie Apache Tomcat?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

Ich habe eine solche Eigenschaft in einer Java-Anwendung von mir.

Kommentare (0)