【问题标题】:create two log files using RollingFileAppender in log4j.xml在 log4j.xml 中使用 RollingFileAppender 创建两个日志文件
【发布时间】:2013-12-31 00:50:07
【问题描述】:

我的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 类中独立记录这两个不同日志文件中的两个不同数据。

例如,

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>

创建的日志文件中没有记录日志数据。日志文件为空。

请确保我的&lt;root&gt;...&lt;/root&gt; 正确。

【问题讨论】:

    标签: java xml logging log4j rollingfileappender


    【解决方案1】:

    你的问题是 &lt;root&gt; 部分,根部分捕获所有日志,并且你告诉它记录到两个附加程序......

    您可以删除它,或者在每个 logger 元素上设置 additivity="false" - 如果它已经通过您的“记录器”之一记录,这将告诉 log4j 不要通过“根”记录相同的日志。

    编辑:您没有说您使用的是哪个版本的 log4j,但我使用的是 log4j-1.2.16,并使用您帖子中的文件,它对我来说完全失败了,因为它不喜欢&lt;appender ref="fileAppender1"/&gt;,它希望它们成为&lt;appender-ref ref="fileAppender1"/&gt;(注意appender 后面的-ref)。如果我添加这些,并添加我建议的可加性属性,那么对我来说它会按您的预期工作。

    【讨论】:

    • 感谢您的快速回复。如果我将 additivity="false" 设置为 &lt;logger name="com.comp.logger1" additivity="false" &gt;&lt;logger name="com.comp.logger2" additivity="false" &gt; ,我的日志数据没有记录在日志文件中
    • 删除additivity 位并删除根部分 - 如果您仍然看不到任何日志,则说明文件的其余部分有问题。一个区别(你的文件和我知道有效的文件之间)是我的“记录器”部分有一个级别,例如&lt;level value="TRACE" /&gt;.
    • 感谢您的回复。如果我删除root 部分意味着,我的日志文件将不会在文件夹中创建。
    • 您可以发布您的 log4j.xml 配置以及如何在 JAVA 类中访问记录器吗?
    • 除了小改动之外,您正在这样做,请参阅编辑后的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多