Hoe log4j goed te initialiseren?

Na het toevoegen van log4j aan mijn applicatie krijg ik de volgende output elke keer als ik mijn applicatie uitvoer:

log4j:WARN Er konden geen appenders gevonden worden voor logger (slideselector.facedata.FaceDataParser).
log4j:WARN initialiseer het log4j systeem goed.

Het lijkt erop dat dit betekent dat er een configuratiebestand ontbreekt. Waar moet dit configuratiebestand zich bevinden en wat is een goede start inhoud?

Ik'm gebruik gewone java voor het ontwikkelen van een desktop applicatie. Dus geen webserver etc...

Oplossing

Log4j zoekt standaard naar een bestand met de naam log4j.properties of log4j.xml op het classpath. Je kunt bepalen welk bestand het gebruikt om zichzelf te initialiseren door systeemeigenschappen in te stellen zoals beschreven hier (zoek naar de "Default Initialization Procedure" sectie).

Bijvoorbeeld:

java -Dlog4j.configuration=customName ....

Zorgt ervoor dat log4j zoekt naar een bestand met de naam customName op het classpath.

Als je problemen hebt, vind ik het handig om log4j.debug aan te zetten:

-Dlog4j.debug

Het zal veel nuttige informatie afdrukken naar System.out over welk bestand het gebruikt heeft om zichzelf te initialiseren, welke loggers / appenders geconfigureerd werden en hoe, enz.

Het configuratiebestand kan een java properties bestand zijn of een xml bestand. Hier is een voorbeeld van het properties bestandsformaat, genomen van de log4j intro documentatie pagina:

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
Commentaren (5)

Zoek een log4j.properties of log4j.xml online die een root appender heeft, en zet die op je classpath.

### 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

zal naar de console loggen. Ik geef de voorkeur aan loggen naar een bestand, zodat je het naderhand kunt onderzoeken.

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

hoewel voor verbose logging toepassingen 100KB meestal moet worden verhoogd tot 1MB of 10MB, vooral voor debug.

Persoonlijk stel ik meerdere loggers in, en zet de root logger op warn of error level in plaats van debug.

Commentaren (0)

Waar ontwikkelt u in? Gebruikt u 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

Ik heb een eigenschap als deze in een Java app van mij.

Commentaren (0)