log4j2日志配置

不同配置标签

功能 标签 简要解释
定义变量 Properties标签 将路径、格式等可变的配置抽取成变量,方便统一修改
具体输出配置 Appender标签 通过Console、RollingFile子标签修改不同输出路径的日志级别、格式、位置等
过滤信息 Loggers标签 设置特定包(例如Spring)的日志级别,减少冗余输出

参考使用实例


<?xml version="1.0" encoding="UTF-8"?>
<!-- 优先级从高到低分别是:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL -->
<Configuration status="WARN" monitorInterval="600">
 
    <Properties>
        <!-- 配置日志文件输出目录 -->
        <Property name="LOG_HOME">.</Property>
        <Property name="PROJECT_NAME">My-service</Property>
        <!-- 设置当前运行环境(local/dev/test/prod),用于区分不同环境的日志 -->
        <Property name="ENV">local</Property>
        <!-- 设置日志文件基础名称,最终文件名为log.log -->
        <Property name="FILE_NAME">log</Property>
        <!-- 设置日志输出格式:前缀+时间+级别+类名+行号+消息+换行 -->
        <Property name="PATTERN">[gateway-service] [%X{traceId}] [%X{skyWalkingTraceId}] %d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n</Property>
        <Property name="ENCODING">UTF-8</Property>
        <Property name="CUSTOM_MESSAGE_KEY">com.fisher</Property>
    </Properties>
 
 <Appenders>
        <!--输出控制台的配置-->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="${PATTERN}"/>
            <ThresholdFilter level="INFO"/>
        </Console>
        <!-- 输出到日志文件 -->
        <RollingFile name="RollingFile" fileName="${LOG_HOME}/logs/${PROJECT_NAME}/${FILE_NAME}.log"
                     filePattern="${LOG_HOME}/logs/${PROJECT_NAME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
            <ThresholdFilter level="INFO"/>
            <PatternLayout charset="${ENCODING}" pattern="${PATTERN}"/>
            <Policies>
                <!--  interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
                    modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- 最多保留文件数 -->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
        <!-- 输出错误信息到日志文件 -->
        <RollingFile name="RollingFileError" fileName="${LOG_HOME}/logs/${PROJECT_NAME}/${FILE_NAME}-error.log"
                     filePattern="${LOG_HOME}/logs/${PROJECT_NAME}/$${date:yyyy-MM}/${FILE_NAME}-error-%d{yyyy-MM-dd}-%i.log.gz">
            <ThresholdFilter level="ERROR"/>
            <PatternLayout charset="${ENCODING}" pattern="${PATTERN}"/>
            <Policies>
                <!--  interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
                    modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- 最多保留文件数 -->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>

        <!-- 输出日志到远程服务器 -->
        <Socket name="Logstash" host="127.0.0.1" port="5047" protocol="TCP">
            <ThresholdFilter level="INFO"/>
            <FisherJsonLayout projectName="${PROJECT_NAME}" env="${ENV}" charset="${ENCODING}" complete="false" compact="true" eventEol="true" locationInfo="true" includeStacktrace="true" />
        </Socket>
    </Appenders>

    <Loggers>
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
        <logger name="org.springframework" level="INFO" additivity="true"/>
        <logger name="org.mybatis" level="INFO" additivity="true"/>
        <!-- 全局日志级别,所有未单独配置的包都遵循此级别 -->
        <root level="INFO">
            <appender-ref ref="Console"/>
            <appender-ref ref="RollingFile"/>
            <appender-ref ref="RollingFileError"/>
            <!--<appender-ref ref="Logstash"/>-->
        </root>
    </Loggers>
</Configuration>

核心功能:

  • 日志格式中自动注入traceId(自定义链路ID)和skyWalkingTraceId(SkyWalking追踪ID)
  • 远程日志收集能力(Logstash Socket输出)
  • ERROR级别日志单独存储
  • 日志文件存储为./logs/My-service/log.log,按天/按100MB滚动压缩,保留30天
  • 过滤掉Spring和MyBatis的DEBUG信息

控制台输出示例:

[my-service] [abc123-trace-xxx] [1.2.3.4.5678] 2026-08-19 18:49:11  INFO GlobalFilter:45 - 请求进入网关,路径=/api/order
posted @ 2026-08-19 21:53  身娇体弱的咸鱼  阅读(2)  评论(0)    收藏  举报