我想将所有错误级别的消息重定向到文件,将信息级别的消息重定向到控制台。
这是我的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始终为空。
我做错了什么?谢谢!

最佳答案

您可以使用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


它有什么作用?它会将所有日志级别为INFO或更高的信息发送到stdout和myAppender。尽管stdout将输出所有(包括更高的日志级别,如WARN和ERROR),但myAppender将过滤掉所有低于WARN的内容(由于log4j.appender.myAppender.Threshold=WARN)。

顺便说一句:不要使用java.lang.Exception作为附加程序的名称。这可能会使任何阅读此配置的人(包括我!)感到困惑。

07-24 15:37