【问题标题】:Logging to different files with log4j使用 log4j 记录到不同的文件
【发布时间】:2014-03-08 13:42:24
【问题描述】:

我正在尝试在我的 java 应用程序中使用 log4j。我只需要将 DEBUG 日志写入 debug.log 文件,仅将 INFO 日志写入 info.log 文件,并且仅将 ERROR 日志写入 error.log 文件。我设法将调试和错误日志写入相应的文件,但信息不起作用。我不明白为什么它不起作用。我想请教您是否可以同时将调试日志和信息日志写入控制台。 结果

为每个级别的日志创建 3 个文件(debug.log、info.log 和 error.log) DEBUG 日志写入 debug.log,ERROR 日志写入 error.log 但 INFO 日志既不写入 info.log,也不写入 debug.log 或 error.log!

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <!-- only DEBUG Appender -->
    <appender name="file1" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="D:\\debugFile.log  "/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n"/> 
            </layout> 
            <!-- Use LevelMatchFilter to write only DEBUG messages to error.log -->
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="debug" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender> 

    <!-- only INFO Appender -->
    <appender name="file2" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="D:\\infoFile.log  "/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n"/> 
            </layout> 
            <!-- Use LevelMatchFilter to write only INFO messages to error.log -->
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="info" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender>

    <!-- only ERROR Appender -->
    <appender name="file3" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="D:\\errorFile.log  "/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%-4r %d{dd MMM yyyy HH:mm:ss} [%t] %-5p %c %x - %m%n"/> 
            </layout> 
            <!-- Use LevelMatchFilter to write only ERROR messages to error.log -->
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="error" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
    </appender> 

    <root> 
            <level value="info"/> 
            <appender-ref ref="file1" /> <!-- sadece DEBUG -->
            <appender-ref ref="file2" /> <!-- sadece INFO -->
            <appender-ref ref="file3" /> <!-- sadece ERROR -->
    </root> 
</log4j:configuration>

【问题讨论】:

  • 似乎一切都好。当您记录INFO 级别的消息时会发生什么?文件根本没有创建吗?如果它被创建,它是否没有在那里记录任何日志,或者它是否记录了它不应该有的日志?请添加更多详细信息。
  • 我在我的问题中添加了额外的信息。果然如我所说

标签: java logging log4j


【解决方案1】:

我稍微修改了一下,效果很好

<?xml version="1.0" encoding="UTF-8"?>

<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
    <param name="target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern"
               value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
    </layout>
</appender>

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

    <param name="Threshold" value="INFO" />
    <param name="MaxFileSize" value="3KB" />
    <param name="MaxBackupIndex" value="10" />
    <param name="File" value="D:\\info.txt" />

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

    <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="info" />
        <param name="AcceptOnMatch" value="true"/>
    </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>

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

    <param name="Threshold" value="DEBUG" />
    <param name="MaxFileSize" value="3KB" />
    <param name="MaxBackupIndex" value="10" />
    <param name="File" value="D:\\debug.txt" />


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

    <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="debug" />
        <param name="AcceptOnMatch" value="true"/>
    </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>

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

    <param name="Threshold" value="ERROR" />
    <param name="MaxFileSize" value="3KB" />
    <param name="MaxBackupIndex" value="10" />
    <param name="File" value="D:\\error.txt" />


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

    <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="error" />
        <param name="AcceptOnMatch" value="true"/>
    </filter>
    <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender>

<root>
    <level value="all"/>
    <appender-ref ref="info" />
    <appender-ref ref="debug" />
    <appender-ref ref="error" />
</root>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多