log4j2
依赖
需要排除掉springboot自带的logback和logging的starter
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>spring-boot-starter-logging</artifactId>
<groupId>org.springframework.boot</groupId>
</exclusion>
<exclusion>
<!--log4j-slf4j-impl与 logback-classic包不兼容,删除这个包 -->
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency> <!-- 引入log4j2依赖 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency> <!-- 异步依赖 -->
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.4.4</version>
</dependency>
XML配置
在resources下创建log4j2.xml
XML大致标签架构(表达的比较直白)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="5">
<Properties>
全局变量
</Properties>
<Appenders>
<console >项目控制台设置</console>
<RollingRandomAccessFile >可归档的日志设置(推荐)</RollingRandomAccessFile >
<RollingFile >可归档的日志设置</RollingFile>
</Appenders>
<Loggers>
<Logger >部分日志设置</Logger>
<AsyncLogger >异步日志</AsyncLogger>
<Root >
<AppenderRef />全局日志
</Root>
</Loggers>
</Configuration>
Configuration
level日志级别: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF
<Configuration status="WARN" status="info" monitorInterval="5">
monitorInterval:xx秒 当xml变化时无需重启,热更新设置
status:Log4j2内部日志的输出级别
Properties 全局变量配置
全局变量配置 ${sys:catalina.home}为tomcat部署路径,例如:/data/tomcat。
<Properties>
<!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
<!--
%[format]conversion{
param}
% 必须,起始符号。
[format] 可选,部分conversion需要,用于指定输出宽度,对齐方式等
conversion 必须,转换符号
param 可选,部分转换符号需要指定参数,如日期格式等
例如:
%d{
yyyy-MM-dd HH:mm:ss} 打印当前时间
%thread表示线程名
%-5level 打印日记级别,并且占5个字符宽度
%class{
36} class路径
%M 打印方法名称
%logger{
360} 表示 Logger 名字最长36个字符
-->
<property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{360} - %msg%n" />
<!-- 定义日志存储的路径,不要配置相对路径 -->
<property name="FILE_PATH" value="/logs" />
<property name="FILE_NAME" value="myApp" />
</Properties>
Appenders 日志定义
定义日志输出目的地,内容和格式等
console 控制台输出
<!--控制台输出日志的格式 target:SYSTEM_OUT 或 SYSTEM_ERR===============================-->
<console name="Console" target="SYSTEM_OUT">
<!--PatternLayout:输出格式,不设置默认为:%m%n.-->
<PatternLayout pattern="${LOG_PATTERN}"/>
<!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="OFF" onMatch="ACCEPT" onMismatch="DENY"/>
</console>
File 自定义所有log信息
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用====-->
<File name="Filelog" fileName="${FILE_PATH}/application.log" append="false">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
RollingRandomAccessFile
输出日志配置
- name:Appender名称在标签内引用
- immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true。
- fileName:日志存储路径
- filePattern:历史日志封存路径。其中%d{yyyyMMddHH}表示了日志的时间单位,log4j2自动识别zip等后缀,表示历史日志需要压缩。
- immediateFlush:磁盘刷新方式 设置为false效率很高,但是日志存储会丢失亲测1w数据丢失3000+
<Ro

本文详细介绍了如何在Spring Boot中排除默认的日志框架并引入Log4j2,通过XML配置文件设置了日志级别、全局变量、Appenders(包括控制台输出和文件归档)、过滤器、日志格式、归档策略和AsyncLogger异步日志。还通过并发测试展示了不同配置下日志丢失的问题。
最低0.47元/天 解锁文章
1507

被折叠的 条评论
为什么被折叠?



