使用log4j.xml,在调试特定文件或包时记录日志,其他内容记录错误信息。

5
我想设置我的log4j.xml文件,将特定的类/包记录在DEBUG级别,并将其余部分记录在ERROR级别。
如下所示,我将gov.xxxx.app.batch.threadgov.xxxx.app.batch.sms.DoWork的日志级别更新为info。
然而,看起来threshold具有优先级(这是有道理的)。 是否有一种方法可以使类/包级别配置优先于阈值?或者另一种方法可以产生期望的结果? 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>
1个回答

1
如果我正确理解您的要求,您希望记录以下内容:
  1. 将所有内容记录到控制台
  2. 将错误记录到logFile + 特定包的INFO日志
如果是这样,您需要执行以下操作:
  1. 在logFile appender上删除阈值(或将其设为INFO)
  2. 从根记录器中删除<appender-ref ref="logFile"/>,因为根记录器指定了“all”,而您不需要这个
  3. 向您想在logFile中查看的所有记录器添加<logger additivity="false" name="com.example"><appender-ref ref="logFile"/></logger>

不,我想将所有错误同时记录到两个日志中。如果匹配软件包或文件名,我只想为两者记录信息。 - ScrappyDev
1
然后将根记录器的级别和logFile附加器的阈值更改为INFO。 - hoaz
好的,所以root = 错误,class/package = 信息,threshold = 信息? - ScrappyDev
1
是的,使用这个设置,您可以从配置中删除除您的包日志记录器之外的所有日志记录器,它们对您的设置没有任何帮助。 - hoaz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接