使用log4j.xml中的RollingFileAppender创建两个日志文件

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (90)

我的log4j.xml配置是这样的,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >

<log4j:configuration>


    <appender name="fileAppender1" class="org.apache.log4j.RollingFileAppender">

        <param name="Threshold" value="ALL" />
        <param name="MaxFileSize" value="3KB" />
        <param name="MaxBackupIndex" value="10" />
        <param name="File" value="F:/logs/Testing/Project_moduleOne.log" />

        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MMM-dd-yyyy HH:mm:ss:SSS} %-5p %m%n" />
        </layout>
    </appender>

    <appender name="fileAppender2" class="org.apache.log4j.RollingFileAppender">

        <param name="Threshold" value="ALL" />
        <param name="MaxFileSize" value="3KB" />
        <param name="MaxBackupIndex" value="10" />
        <param name="File" value="F:/logs/PAD_Testing/Project_moduleTwo.log" />


        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{MMM-dd-yyyy HH:mm:ss:SSS} %-5p %m%n" />
        </layout>
    </appender>


    <!--sets the priority log level for org.springframework -->
    <logger name="com.comp.logger1">
         <appender ref="fileAppender1"/>
    </logger>


    <logger name="com.comp.logger2">
        <appender ref="fileAppender2" />
    </logger>


    <!--sets the default priority log level -->
    <root>
        <priority value="all"></priority>
        <appender-ref ref="fileAppender1" />
        <appender-ref ref="fileAppender2" />
    </root>

</log4j:configuration>

并且还在指定位置创建了两个日志文件。

我需要知道如何在JAVA类中独立地记录这两个不同的log_files中的两个不同的数据。

例如,

Logger logOne = Logger.getLogger("com.comp.logger1");
Logger logTwo = Logger.getLogger("com.comp.logger2");

上面的代码对我不起作用。所有日志信息都记录到创建的两个日志文件中。我需要分离日志数据。

我的需要是

  1. 我想创建两个日志文件。因为我的项目有两个模块,并将每个模块记录在单独的日志文件中。
  2. 之后,我必须独立记录每个模块记录数据。
  3. 请确保我使用记录器名称正确登录我的java类。

任何使用log4j.xml的新的或完整的示例都非常感谢。

编辑:

如果我在记录器中添加 additivity =“false”

<logger name="com.comp.logger1" additivity="false">
     <appender ref="fileAppender1" /> 
</logger>


<logger name="com.comp.logger2" additivity="false">
    <appender ref="fileAppender2" />
</logger>

日志数据未记录在创建的日志文件中。日志文件为空。

请确保我的信息<root>...</root>是正确的。

提问于
用户回答回答于

问题在于<root>部分,根部分捕获所有日志,并且您已告诉它记录到两个appender ...

你可以删除它,或者additivity="false"在你的每个logger元素上设置 - 这将告诉log4j如果已经通过你的一个'logger'记录了log',则不会通过'root'记录相同的日志。

编辑:你没有说你正在使用哪个版本的log4j,但我正在使用log4j-1.2.16,并且在帖子中使用该文件,它完全失败了,因为它不喜欢它<appender ref="fileAppender1"/>,它想要它们是<appender-ref ref="fileAppender1"/>(注意-ref在附加器后)。如果我添加这些,并添加我建议的additivity属性,那么对我来说它可以按预期工作。

扫码关注云+社区

领取腾讯云代金券