Log4j分级别保存日志到单个文件中,并记录IP和用户信息

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %X{ip} %t %p %c————%X{userAccount} %m%n" />
        </layout>
    </appender>
    <!-- 将日志信息输出到文件,但是当文件的大小达到某个阈值的时候,日志文件会自动回滚 -->
    <appender name="INFO" class="org.apache.log4j.RollingFileAppender">
        <!-- 设置日志信息输出文件全路径名 -->
        <param name="File" value="/var/cispLog/info/info.log" />
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <!-- 设置当日志文件达到此阈值的时候自动回滚,单位可以是KB,MB,GB,默认单位是KB -->
        <param name="MaxFileSize" value="100MB" />
        <!-- 设置保存备份回滚日志的最大个数 -->
        <param name="MaxBackupIndex" value="10" />
        <!-- 设置日志输出的样式 -->
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %X{ip} %t %p %c————%X{userAccount} %m%n" />
        </layout>
        <!--过滤器设置输出的级别 -->
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <!-- 设置日志输出的最小级别 -->
            <param name="LevelMin" value="INFO" />
            <!-- 设置日志输出的最大级别 -->
            <param name="LevelMax" value="INFO" />
        </filter>
    </appender>

    <appender name="WARN" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="/var/cispLog/warn/warn.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="50MB" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %X{ip} %t %p %c————%X{userAccount} %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="WARN" />
            <param name="LevelMax" value="WARN" />
        </filter>
    </appender>

    <appender name="ERROR" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="/var/cispLog/error/error.log" />
        <param name="Append" value="true" />
        <param name="MaxFileSize" value="50MB" />
        <param name="MaxBackupIndex" value="10" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %X{ip} %t %p %c————%X{userAccount} %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="ERROR" />
            <param name="LevelMax" value="ERROR" />
        </filter>
    </appender>
    <root>
        <priority value="debug" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
        <appender-ref ref="ERROR" />
    </root>
</log4j:configuration>

在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要记录访问该系统的IP或者用户的信息。

MDC便提供了这个功能,只需要在代码中添加下面的方法即可

MDC.put("ip", ip);
MDC.put("userAccount", user.getUserAccount());

在配置文件中用下面的方式获取即可

%X{ip} 
%X{userAccount}
原文地址:https://www.cnblogs.com/java-spring/p/8359629.html