我在我的应用程序中使用Log4j,我使用的也使用Log4j的库也将它们的日志输出到我创建的日志文件中。我已经创建了appender来将一个库的日志重定向到“other.log”文件,但其他库继续记录到我的主“info.log”文件。
这是我的log4j.properties。请注意,最后,我为库alibrary.apackage
创建了一个类别,为myproject.apackage
创建了一个类别,以便库日志转到一个appender,项目日志转到另一个appender。
log4j.rootLogger=ALL,InfoAppender,OtherAppender
# AdminFileAppender - used to log messages in the admin.log file.
log4j.appender.InfoAppender=org.apache.log4j.FileAppender
log4j.appender.InfoAppender.File=info.log
log4j.appender.InfoAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.InfoAppender.layout.ConversionPattern= %d{yyyy/MM/dd HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
log4j.appender.InfoAppender.Threshold=DEBUG
log4j.appender.OtherAppender=org.apache.log4j.FileAppender
log4j.appender.OtherAppender.File=other.log
log4j.appender.OtherAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.OtherAppender.layout.ConversionPattern= %d{yyyy/MM/dd HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n
log4j.appender.OtherAppender.Threshold=ALL
log4j.category.alibrary.apackage=DEBUG,OtherAppender
log4j.additivity.com.mchange.v2=false
log4j.category.myproject.apackage=ALL,InfoAppender
log4j.additivity.trackme=false
我仍然继续得到以下内容:
在“info.log”中:
...Logs that I want to be here...
Logs that I do not want to be here, that should go to "other.log". Ex.:
2010/10/28 15:29:25,667 [main] DEBUG org.apache.jasper.compiler.JspRuntimeContext - Parent class loader is: ContextLoader@null
2010/10/28 15:29:25,668 [main] DEBUG org.apache.jasper.servlet.JspServlet - ...
2010/10/28 15:29:25,668 [main] DEBUG org.apache.jasper.servlet.JspServlet - IMPORTANT: Do not modify the generated servlets
在“other.log”中:
All the logs that I do not want in "info.log" are here. OK.
我的问题是:如何将所有不需要的日志(即其他库中的日志)重定向到“other.log”?
答案 0 :(得分:2)
你想让OtherAppender成为rootLogger,并专门将你想要的消息推送到InfoAppender。
我将appender定义保持不变,然后像这样配置记录器:
log4j.rootLogger=ALL,OtherAppender
log4j.category.alibrary.apackage=DEBUG # will default to OtherAppender
log4j.additivity.com.mchange.v2=false
log4j.category.myproject.apackage=ALL,InfoAppender # will go to both logs
log4j.additivity.trackme=false
这会将所有内容路由到OtherAppender,只需将 myproject.apackage 中的内容路由到InfoAppender中。