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

3

我的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>

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

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

1个回答

2
您的问题出在<root>部分,它捕获了所有日志,并且您告诉它记录到两个附加器中...
您可以将其删除,或在每个logger元素上设置additivity="false" - 这将告诉log4j如果已经通过其中一个'logger'记录了相同的日志,则不要通过'root'再次记录相同的日志。 编辑:您没有说您使用的是哪个版本的log4j,但我正在使用log4j-1.2.16,并且使用您帖子中的文件,它完全失败,因为它不喜欢<appender ref="fileAppender1"/>,它希望它们是<appender-ref ref="fileAppender1"/>(请注意,在附加器后面有-ref)。 如果我添加这些内容,并且还添加了我建议的additivity属性,那么对我来说,它会像您期望的那样工作。

1
去掉“additivity”部分,也去掉根部分-如果仍然没有看到日志,则文件的其余部分有问题。你的文件和我知道有效的文件之间的一个区别是我的“logger”部分有一个级别,例如<level value="TRACE" /> - stripybadger
你的两个日志记录器是 com.comp.logger1com.comp.logger2。你没有为 任何名称 指定一个日志记录器。因此,log4j 将使用根日志记录器。由于你的根日志记录器记录到两个附加器中,所以日志将显示在两个文件中。如果你不想这样,就改变你的根日志记录器。 - stripybadger
谢谢回复。但当使用未知的记录器名称时,如何避免记录?因为我需要这个配置。 - Human Being
请回答我的问题。我需要这个,而且很紧急。 - Human Being
你看到我的评论了吗?!“如果你不想这样的话,改变你的根记录器”。当使用“未知的记录器名称”时,你的根记录器会告诉log4j同时记录到两个文件。如果你不想这样做,就改变你的根记录器。或者干脆把它删除掉。 - stripybadger
显示剩余8条评论

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