SpringBoot+Slf4j+Log4j2+mybatis 日志整合

注:本次使用的是springboot4,具体版本为springboot4.0.6 GA (正式版)

Slf4j为外部调用提供了统一的日志接口,其内部实现取决于使用的日志框架。Slf4j是门面模式的优秀实践。

目的是要将这四部分进行整合,即希望日志都通过Log4j2来进行打印/记录。

1)引入依赖(不知道这几个依赖是否有多余的,这四个一起是能正常实现,少一个多一个没验证过):

复制代码
<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>2.0.18</version>
			<scope>compile</scope>
		</dependency>
		<!-- Source: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j2-impl -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j2-impl</artifactId>
			<version>2.26.0</version>
			<scope>compile</scope>
			<exclusions>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-core</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- Source: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.26.0</version>
			<exclusions>
				<exclusion>
					<groupId>org.apache.logging.log4j</groupId>
					<artifactId>log4j-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- Source: https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.26.0</version>
			<scope>compile</scope>
		</dependency>

上面依赖包括:slf4j-api、log4j-slf4j2-impl、log4j-api、log4j-core

需要注意的是,要排除多余依赖,不一定要按下面写的来排除,上面四个依赖只要是唯一的就行。我的依赖排除如下:

log4j-slf4j2-impl依赖中,排除log4j-api和log4j-core;

log4j-core依赖中,排除log4j-api;

另外,spring-boot-starter依赖中,要排除spring-boot-starter-logging。

ps:还可以使用另一种依赖 spring-boot-starter-log4j2 代替,具体实操没有,但理论可行。

2)mybatis-config.xml配置-实现sql日志通过log4j2的打印

复制代码
    <settings>
        <setting name="logImpl" value="SLF4J"/>
    </settings>

3)log4j2.xml配置-精细化控制log4j2的日志使用

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
    <properties>
        <property name="LOG_HOME">D:/logs</property>
        <property name="FILE_NAME">mylog</property>
        <property name="log.sql.level">debug</property>
    </properties>


    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] LOG4J2 %-5level %l - %msg%n"/>
        </Console>

        <RollingRandomAccessFile name="RollingRandomAccessFile"
                                 fileName="C:\Users\aaa\Desktop\testlog/log4j2-config.xml.log"
                                 filePattern="C:\Users\aaa\Desktop\testlog/%d{yyyy-MM-dd}/log4j2-config.xml-%i.log">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] LOG4J2 %-5level %l - %msg%n"/>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1"/>
            <SizeBasedTriggeringPolicy size="10 MB"/>
        </Policies>
        <DefaultRolloverStrategy max="20"/>
    </RollingRandomAccessFile>
</Appenders>

<Loggers>
    <Root level="info">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="RollingRandomAccessFile"/>
    </Root>

    <Logger name="com.example.dao.EmpDao" level="${log.sql.level}" additivity="false">
        <AppenderRef ref="Console"/>
    </Logger>
</Loggers>
</Configuration>

经过以上三个步骤,即可实现log4j2日志框架的使用。

相关推荐
她的男孩44 分钟前
Spring Boot 4 升级别只看编译绿:Forge Admin 在 Jackson、Tomcat JSON 限流、MP 包名与 Flowable 库上踩过的坑
java·spring boot·后端
Knight_AL1 小时前
别把 ThreadLocal 写进 Jackson Serializer
java·spring boot·spring
paopaokaka_luck1 小时前
校园新闻推荐系统(DeepSeek新闻助手、个性化推荐算法、 Redis热词排行榜、ECharts运营分析、互动与实时通知、新闻运营闭环)
java·spring boot·mysql·spring·tomcat·echarts·intellij idea
凤山老林1 小时前
从零搭建企业 OAuth2 授权中心:Spring Boot 集成 Spring Authorization Server 与
数据库·spring boot·spring
流烟默2 小时前
Spring Boot 异常响应被序列化为 XML 的排查与修复
xml·spring boot·后端
paopaokaka_luck2 小时前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法
毕设单片机3 小时前
springboot志愿服务平台的设计与实现 36731
java·spring boot·mysql·志愿服务平台
云絮.4 小时前
mybatis(二)
java·数据库·mybatis
xiaoqiMikko5 小时前
Redis 实战(基础篇):把一个老 RedisUtil 搬到 Spring Boot 4,一路踩出来的坑(真机实测)
java·spring boot·redis
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的母婴全程服务管理系统-网站-文档指导-Java-springboot
java·spring boot·课程设计