如何让 logger.trace() 和 logger.info() 一起工作

How to make logger.trace() and logger.info() work together

我在与 INFO 函数不同的文件中记录 TRACE 函数时遇到问题,我准备了一个经典的 log4j.xml 文件,其中包含所有必需的配置。

logger.info() 正在工作。
logger.trace() 工作。

         <appender name="file" class="org.apache.log4j.FileAppender">
            <param name="append" value="true" />
            <param name="file" value="C:/logs/transaction.log" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
            </layout>
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                <param name="LevelMin" value="TRACE" />
                <param name="LevelMax" value="TRACE" />
                <param name="AcceptOnMatch" value="true" />
            </filter>
        </appender>

        <appender name="fileINFO" class="org.apache.log4j.FileAppender">
            <param name="append" value="true" />
            <param name="file" value="C:/logs/server.log" />
            <layout class="org.apache.log4j.PatternLayout">
                <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
            </layout>
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                <param name="LevelMin" value="INFO" />
                <param name="LevelMax" value="INFO" />
                <param name="AcceptOnMatch" value="true" />
            </filter>
        </appender>

        <logger name="ma.prg.net">
            <level value="trace" />
            <appender-ref ref="file" />
        </logger>

        <logger name="ma.prg.net">
            <level value="info" />
            <appender-ref ref="fileINFO" />
        </logger>

logger.trace() 在我添加 fileINFO appender 之前工作正常。

提前致谢。

您不能对同一个记录器进行两次配置。只需将您的记录器配置更改为:

<logger name="ma.prg.net">
  <level value="trace" />
  <appender-ref ref="file" />
  <appender-ref ref="fileINFO" />
</logger>

有了这个,您可以将日志消息发送到两个 附加程序。但是,由于您已经使用 LevelMinLevelMax 分别配置了每个附加程序,因此每个附加程序都会过滤掉它应该打印的消息。