log4j - INFO到控制台和ERRORS到文件

时间:2014-06-20 11:22:54

标签: java logging log4j

我想将具有错误级别的所有邮件重定向到文件,并将具有信息级别的邮件重定向到控制台。 这是我的log4j.properties:

log4j.rootLogger=INFO, stdout
log4j.logger.java.lang.Exception=ALL, java.lang.Exception

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.java.lang.Exception=org.apache.log4j.RollingFileAppender
log4j.appender.java.lang.Exception.File=\\clientexceptionlog.txt
log4j.appender.java.lang.Exception.MaxFileSize=2048KB
log4j.appender.java.lang.Exception.layout=org.apache.log4j.PatternLayout
log4j.appender.java.lang.Exception.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

但似乎它没有像我预期的那样工作:clientexceptionlog.txt总是空的。 我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:5)

您可以使用Treshold选项。这样做,您可以将rootLogger设置为stdout和文件追加器(我在下面的代码片段中将其命名为myAppender):

log4j.rootLogger=INFO, stdout, myAppender

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

log4j.appender.myAppender=org.apache.log4j.RollingFileAppender
log4j.appender.myAppender.Threshold=WARN
log4j.appender.myAppender.File=\\clientexceptionlog.txt
log4j.appender.myAppender.MaxFileSize=2048KB
log4j.appender.myAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myAppender.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

它做什么?它将具有loglevel INFO或更高级别的所有内容发送到stdout和myAppender。虽然stdout将输出所有(包括更高的loglevel,如WARN和ERROR),myAppender将过滤掉低于WARN的所有内容(由于log4j.appender.myAppender.Threshold=WARN)。

BTW:不要使用java.lang.Exception作为appender的名称。这可能会混淆任何阅读此配置的人(包括我!)