Hvordan initialisere log4j på riktig måte?

Etter å ha lagt til log4j i applikasjonen min får jeg følgende utdata hver gang jeg kjører applikasjonen min:

log4j:WARN Ingen vedlegg ble funnet for logger (slideselector.facedata.FaceDataParser).
log4j:WARN Vennligst initialiser log4j-systemet på riktig måte.

Det ser ut til at dette betyr at en konfigurasjonsfil mangler. Hvor skal denne konfigurasjonsfilen være plassert, og hva er et godt startinnhold?

Jeg bruker vanlig java for å utvikle en desktop-applikasjon. Så ingen webserver osv ...

Løsning

Log4j ser som standard etter en fil som heter log4j.properties eller log4j.xml på klassestien. Du kan kontrollere hvilken fil den bruker til å initialisere seg selv ved å angi systemegenskaper som beskrevet her (se avsnittet "Standard initialiseringsprosedyre").

For eksempel:

java -Dlog4j.configuration=customName ....

Vil få log4j til å lete etter en fil som heter customName på klassestien.

Hvis du har problemer, synes jeg det er nyttig å slå på log4j.debug:

-Dlog4j.debug

Det vil skrive ut til System.out mye nyttig informasjon om hvilken fil den brukte for å initialisere seg selv, hvilke loggere / appendiks som ble konfigurert og hvordan osv.

Konfigurasjonsfilen kan være en java-egenskapsfil eller en xml-fil. Her er et eksempel på egenskapsfilformatet hentet fra introduksjonsdokumentasjonssiden for log4j:

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

Finn en log4j.properties eller log4j.xml på nettet som har en root appender, og legg den på klassestien din.

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

vil logge til konsollen. Jeg foretrekker å logge til en fil slik at du kan undersøke etterpå.

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

selv om 100KB vanligvis må økes til 1MB eller 10MB for verbose loggingsapplikasjoner, spesielt for feilsøking.

Personlig setter jeg opp flere loggere, og setter rotloggeren til advarsel eller feilnivå i stedet for feilsøking.

Kommentarer (0)

Hva utvikler du i? Bruker du 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

Jeg har en slik egenskap i en av mine Java-applikasjoner.

Kommentarer (0)