wie man log4j dazu bringt, auch auf die Konsole zu schreiben

69

Gibt es eine Möglichkeit, log4j anzuweisen, sein Protokoll in die Datei und in die Konsole zu schreiben? danke gibt es meine Eigenschaften:

log4j.rootLogger=DEBUG,console,R
log4j.rootLogger=INFO, FILE

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{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n

log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=log4j.log
log4j.appender.FILE.MaxFileSize=512KB
log4j.appender.FILE.MaxBackupIndex=3
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n
fatnjazzy
quelle
Was bedeutet R?
Lei Yang

Antworten:

71

Ihre Root-Logger-Definition ist etwas verwirrt. Siehe die log4j-Dokumentation .

Dies ist eine Standard-Java-Eigenschaftendatei. Dies bedeutet, dass Zeilen als Schlüssel-Wert-Paare behandelt werden. Ihre zweite log4j.rootLoggerZeile überschreibt die erste, was erklärt, warum Sie im Appender nichts sehen console.

Sie müssen Ihre beiden rootLoggerDefinitionen zu einer zusammenführen. Es sieht so aus, als würden Sie versuchen, DEBUGNachrichten an die Konsole und INFONachrichten an die Datei zu senden. Der Root-Logger kann nur eine Ebene haben. Sie müssen daher Ihre Konfiguration ändern, damit die Appender über die entsprechenden Ebenen verfügen.

Obwohl ich nicht überprüft habe, ob dies korrekt ist, würde ich vermuten, dass es ungefähr so ​​aussieht:

log4j.rootLogger=DEBUG,console,file
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.file=org.apache.log4j.RollingFileAppender

Beachten Sie, dass Sie auch einen Fehler im Gehäuse haben - Sie haben Konsolen-Kleinbuchstaben an einer Stelle und in CAPS an einer anderen.

Steven Schlansker
quelle
5
Wie wird zwischen DEBUG und INFO unterschieden? - Wie Sie selbst betont haben, wollte das OP dies.
Hbogert
38

Ihre log4j-Datei sollte ungefähr so ​​aussehen wie die folgenden Kommentare.

# Define the types of logger and level of logging    
log4j.rootLogger = DEBUG,console, FILE

# Define the File appender    
log4j.appender.FILE=org.apache.log4j.FileAppender    

# Define Console Appender    
log4j.appender.console=org.apache.log4j.ConsoleAppender    

# Define the layout for console appender. If you do not 
# define it, you will get an error    
log4j.appender.console.layout=org.apache.log4j.PatternLayout

# Set the name of the file    
log4j.appender.FILE.File=log.out

# Set the immediate flush to true (default)    
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode    
log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite    
log4j.appender.FILE.Append=false

# Define the layout for file appender    
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout    
log4j.appender.FILE.layout.conversionPattern=%m%n
Ramit Girdhar
quelle
7

Dies funktioniert gut für Konsolen im Debug-Modus

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p - %m%n
Brijendra Verma
quelle
0

Schreiben Sie den Root-Logger wie folgt für die Protokollierung sowohl auf der Konsole als auch auf der DATEI

log4j.rootLogger = FEHLER, Konsole, DATEI

Schreiben Sie die entsprechenden Definitionen wie Ziel, Layout und ConversionPattern (MaxFileSize für Datei usw.).

Pratap Kumar Panda
quelle