Springboot使用logback日志记录数据库操作

springboot默认的日志抽象层框架是:SLF4j
springboot默认的日志实现框架是: Logback
Spring框架默认是用JCL(commons-logging)作为日志抽象层框架;
springboot在集成spring、mybatis等框架的过程中,已经帮我们排除了其他框架的原本默认日志,因此我们不需要再进行依赖排除

如何让系统中所有的日志都统一到slf4j:
1、将系统中其他日志框架先排除出去;
2、用中间包来替换原有的日志框架;
3、我们导入slf4j其他的实现
在这里插入图片描述

在这里插入图片描述

上面是springbootr日志的一些转化,下面来说如何使用logback日志记录数据库操作:

application.yml文件中进行两个配置:

logging:
  config: classpath:logback.xml
  level:
    com.example.dao: debug   #指定dao包下文件的日志级别

logback.xml文件

	

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds">
    <!--日志输入到控制台-->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="error">   <!--指定整个项目的默任日志级别为 error -->
        <appender-ref ref="STDOUT" />
    </root>       

</configuration>
2020-12-19 14:07:09.419 [http-nio-8080-exec-1] DEBUG com.example.dao.IStaffnterfaceDao.selectByid - ==>  Preparing: select * from staff where sid=?
2020-12-19 14:07:09.440 [http-nio-8080-exec-1] DEBUG com.example.dao.IStaffnterfaceDao.selectByid - ==> Parameters: 3(Integer)
2020-12-19 14:07:09.458 [http-nio-8080-exec-1] DEBUG com.example.dao.IStaffnterfaceDao.selectByid - <==      Total: 1

此时,运行测试,控制台仅显示数据库操作的日志。

<think>好的,我现在要解决用户的问题,就是在Spring Boot 3中如何配置Logback将日志写入数据库。首先,我需要回顾一下用户提供的参考资料,虽然这些资料是针对旧版本的,但基本步骤可能类似。不过Spring Boot 3可能会有一些变化,需要注意。 首先,用户提到的引用里,比如引用[3]和[4],都提到了在logback.xml中配置数据库相关的appender,使用DBAppender,并且需要创建对应的数据库表。所以第一步应该是检查Logback的DBAppender在Spring Boot 3中是否仍然适用,或者是否有新的配置方式。 然后,用户可能已经知道在Spring Boot中默认使用Logback,所以不需要额外引入依赖,但需要确认是否有新的依赖项,比如数据库驱动、连接池等。例如,如果使用MySQL,需要添加MySQL Connector的依赖。 接下来是配置logback-spring.xml文件。用户提供的示例中,在logback.xml里配置了DBAppender,并指定了数据源。但在Spring Boot 3中,可能更推荐使用logback-spring.xml而不是logback.xml,以便利用Spring的环境配置。同时,数据源的配置可能需要通过Spring的DataSource,而不是直接在Logback配置中写死,这样更符合Spring Boot的惯例。 然后是关于数据库表的创建。根据引用中的信息,需要创建logging_event等表,包含各种字段。需要确认这些表结构是否在Logback的最新版本中有变化,或者是否需要调整字段类型以适应不同的数据库。 另外,用户示例中使用了%X{user}来获取MDC中的用户信息,这可能需要确保在记录日志时正确设置MDC的内容。比如在控制器中,用户登录时可能需要将用户信息放入MDC,这样日志才能捕获到。 测试部分,用户提供的代码示例中,通过LoggerFactory获取Logger,然后调用logger.error或logger.info。需要确保在Spring Boot 3中,这些API是否依然适用,可能不会有太大变化,但需要确认。 可能遇到的问题包括数据源配置不正确,导致Logback无法连接到数据库;表结构不匹配,导致插入日志失败;或者Spring Boot 3对某些配置项的要求更严格,比如需要显式配置数据源bean等。 然后需要思考如何将旧版本的配置迁移到Spring Boot 3。例如,是否需要在application.properties中配置数据源,然后在logback-spring.xml中通过Spring的JNDI或直接引用数据源bean。可能需要使用<springProperty>标签来引入Spring管理的DataSource。 另外,Logback的DBAppender可能依赖特定的数据库驱动和JDBC配置,需要确保依赖正确,并且数据库连接参数正确,比如URL、用户名、密码。 最后,生成相关问题时要考虑用户可能的后续疑问,比如性能影响、如何过滤日志级别、事务管理对日志写入的影响,或者如何自定义日志表结构等。</think>### 在Spring Boot 3中配置Logback将日志写入数据库的步骤 #### 1. 添加依赖 确保`pom.xml`中包含Spring Boot Starter JDBC和数据库驱动(以MySQL为例): ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.0.33</version> </dependency> ``` #### 2. 创建数据库表 根据Logback的`DBAppender`要求,创建表结构(示例为MySQL): ```sql CREATE TABLE logging_event ( event_id BIGINT AUTO_INCREMENT PRIMARY KEY, timestmp BIGINT NOT NULL, formatted_message TEXT NOT NULL, logger_name VARCHAR(255) NOT NULL, level_string VARCHAR(50) NOT NULL, thread_name VARCHAR(255), reference_flag SMALLINT, caller_filename VARCHAR(255), caller_class VARCHAR(255), caller_method VARCHAR(255), caller_line CHAR(4) ); ``` #### 3. 配置数据源 在`application.properties`中配置数据库连接: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/log_db spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` #### 4. 编写Logback配置文件 在`src/main/resources/logback-spring.xml`中配置`DBAppender`: ```xml <configuration> <!-- 引用Spring Boot管理的DataSource --> <springProperty name="dataSource" source="spring.datasource"/> <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource"> <dataSource>${dataSource}</dataSource> </connectionSource> </appender> <!-- 设置日志级别并关联Appender --> <root level="INFO"> <appender-ref ref="DB"/> </root> </configuration> ``` #### 5. 代码示例 在Controller中记录日志: ```java @RestController public class UserController { private static final Logger logger = LoggerFactory.getLogger(UserController.class); @PostMapping("/login") public String login(@RequestParam String username) { try { logger.info("用户登录尝试: {}", username); // 业务逻辑 return "success"; } catch (Exception e) { logger.error("登录失败: {}", e.getMessage()); // 此错误日志会被写入数据库[^3] return "error"; } } } ``` #### 注意事项 1. **表结构兼容性**:需确保表结构与Logback的`DBAppender`要求一致,否则可能写入失败[^4]。 2. **性能影响**:高频日志写入需结合连接池(如HikariCP)优化。 3. **日志级别控制**:可通过`<filter>`标签过滤特定级别日志[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值