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

浙公网安备 33010602011771号