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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20546392/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 02:41:31  来源:igfitidea点击:

create two log files using RollingFileAppender in log4j.xml

javaxmllogginglog4jrollingfileappender

提问by Human Being

My log4j.xmlconfiguration was like ,

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

And two log files also created in the specified location.

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

I need to know how to log two different data's in these two different log_files independently in JAVAclass.

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

For example,

例如,

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

The above code is not working for me. All the log informations are logged to both the created two log files. I need the separation of logging data.

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

My need is,

我的需要是

  1. I want to create two log file. Because my project has two modules and log each module in separate log files.

  2. After that , I have to log each module logging data independently .

  3. Please make sure I used the logger name for logging in my java class correctly.

  1. 我想创建两个日志文件。因为我的项目有两个模块并将每个模块记录在单独的日志文件中。

  2. 之后,我必须独立记录每个模块的日志数据。

  3. 请确保我正确使用了记录器名称来登录我的 java 类。

Any new or complete examples using log4j.xml are greatly appreciated.

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

EDIT :

编辑 :

If I add the additivity="false"in the logger as,

如果我在记录器中添加 additivity="false"作为,

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


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

The log data didn't logged in the created log file.The log file was empty.

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

Please make sure my <root>...</root>is correct.

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

采纳答案by stripybadger

You problem is with the <root>section, the root section captures all logs, and you've told it to log to both appenders...

您的问题出在该<root>部分,根部分捕获所有日志,并且您已告诉它记录到两个附加程序...

You could remove it, or set additivity="false"on each of your loggerelements - this will tell log4j not to log the same log through 'root' if it's already been logged through one of your 'logger's.

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

Edit:you don't say which version of log4j you are using, but I'm using log4j-1.2.16, and using the file in your post, it fails completely for me because it doesn't like the <appender ref="fileAppender1"/>, it wants them to be <appender-ref ref="fileAppender1"/>(note the -refafter the appender). If I add these in, and also add the additivity attributes that I suggested, then for me it works as you expect.

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