java 使用 log4j.xml,在调试其他所有错误时记录特定文件或包
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36457845/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Using log4j.xml, log specific file or package at debug everything else at error
提问by ScrappyDev
I'd like to setup my log4j.xml file to log specific classes/packages at DEBUG level and the rest at ERROR level.
我想设置我的 log4j.xml 文件以在 DEBUG 级别记录特定的类/包,而在 ERROR 级别记录其余的类/包。
As you can see below I updated the logging level to info for gov.xxxx.app.batch.thread
and gov.xxxx.app.batch.sms.DoWork
to info.
正如您在下面看到的,我将日志记录级别更新为 info forgov.xxxx.app.batch.thread
和gov.xxxx.app.batch.sms.DoWork
info。
However it looks like the threshold
takes precedence (which makes sense).
Is there a way to make it so that the class/package level config takes precedence over the threshold? Or another approach that would yield the desired result?
然而,它看起来threshold
优先(这是有道理的)。有没有办法让类/包级别的配置优先于阈值?或者另一种可以产生预期结果的方法?
log4j.xml:
log4j.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="threshold" value="all"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d %p %c %L - %m%n"/>
</layout>
</appender>
<appender name="logFile" class="org.apache.log4j.DailyRollingFileAppender">
<param name="file" value="${app.batchdriver.home}/logs/${app.batchdriver.log.name}"/>
<param name="maxFileSize" value="5MB"/>
<param name="maxBackupIndex" value="20"/>
<param name="threshold" value="error"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="conversionPattern" value="%d %p %c %L - %m%n"/>
</layout>
</appender>
<!-- Logger for Batch classes -->
<logger name="gov.xxxx.app">
<level value="error"/>
</logger>
<!-- Logger for Spring classes -->
<logger name="org.springframework">
<level value="error"/>
</logger>
<!-- Logger for Hibernate classes -->
<logger name="org.hibernate">
<level value="error"/>
</logger>
<!-- Logger for Apache classes -->
<logger name="org.apache">
<level value="error"/>
</logger>
<!-- Logger for Apache classes -->
<logger name="net.sf">
<level value="error"/>
</logger>
<!-- Logger for testing Performance -->
<logger name="gov.xxxx.app.batch.thread">
<level value="info"/>
</logger>
<logger name="gov.xxxx.app.batch.sms.DoWork">
<level value="info"/>
</logger>
<root>
<priority value ="all" />
<appender-ref ref="console"/>
<appender-ref ref="logFile"/>
</root>
</log4j:configuration>
回答by hoaz
If I understand your requirements correctly you want to log:
如果我正确理解您的要求,您想记录:
- everything to console
- errors to logFile + INFO logs from specific packages
- 一切都可以安慰
- 来自特定包的 logFile + INFO 日志的错误
If that is the case you need to do following:
如果是这种情况,您需要执行以下操作:
- remove threshold (or make it INFO) on logFile appender
- remove
<appender-ref ref="logFile"/>
from root logger because root logger specifies "all" and you do not want that - add to all loggers which you want to see in logFile
- 删除 logFile appender 上的阈值(或使其成为 INFO)
<appender-ref ref="logFile"/>
从根记录器中删除,因为根记录器指定“全部”而您不希望那样- 添加到您想在 logFile 中看到的所有记录器