如何使log4j也写入控制台

时间:2010-08-01 17:21:10

标签: java apache logging log4j

有没有办法告诉log4j将其日志写入文件和控制台? 谢谢 有我的属性:

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

5 个答案:

答案 0 :(得分:64)

您的根记录器定义有点混乱。 请参阅log4j documentation

这是一个标准的Java属性文件,这意味着将行视为键=值对。您的第二条log4j.rootLogger行会覆盖第一行,这就解释了为什么您在console appender上没有看到任何内容。

您需要将两个rootLogger定义合并为一个。看起来您正试图将DEBUG消息发送到控制台并将INFO消息发送到该文件。根记录器只能有一个级别,因此您需要更改配置,以便appender具有适当的级别。

虽然我没有证实这是正确的,但我猜它看起来像这样:

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

请注意,套管中也有错误 - 您在一个位置使用控制台小写,在另一个位置使用CAPS。

答案 1 :(得分:33)

您的log4j文件应如下所示:

# 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

答案 2 :(得分:6)

这适用于调试模式下的控制台

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

答案 3 :(得分:0)

如下所示编写root记录器,以便同时在控制台和FILE上记录

log4j.rootLogger = ERROR,控制台,文件

并编写相应的定义,如Target,Layout和ConversionPattern(文件的MaxFileSize等)。

答案 4 :(得分:0)

这就是我正在寻找基于命令行的工具的确切用例。想要在控制台上显示 INFO 但想要将更详细的信息记录到日志文件中。经过各种建议,最后通过使用'log4j.appender.FILE.Threshold'解决了这个问题 像下面这样。:

log4j.rootLogger=DEBUG,CONSOLE,FILE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.File=output/log.log
log4j.appender.CONSOLE.Threshold=INFO
log4j.appender.FILE.Threshold=DEBUG