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

标签 java xml logging log4j rollingfileappender

我的 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>部分,根部分捕获所有日志,并且您已经告诉它记录到两个附加程序...

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

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

关于java - 在 log4j.xml 中使用 RollingFileAppender 创建两个日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20546392/

相关文章:

java - 在 Java 中使用 Android TextView 时出错

java - 在Java中,为什么参数化类型的构造函数的无类型调用会引起编译器警告?

xml - XSLT 1.0 可以在 select 子句中的 xmlns 属性上使用变量吗?

java - .NET 的企业库的 Java 等价物是什么?

java - 无法在 Android 应用程序的对象内返回 JSON 对象

java - 返回一个列表,我已经有一个rowmapper实现

c# - Xsl 转换剪切两个 <xsl :value-of select's 之间的空间

xml - XQuery:如何使用日期并比较它们

c# - Log4Net:如何向每个日志行添加简单索引器(行号)

java - 使用 Spring Cloud Sleuth 的 Spring AOP 记录器跟踪 ID?