SprinngBoot使用logback记录操作日志

SpringBoot对logback提供了默认配置,照着网上的贴子配置并不是一次就成功了,这里记录一下最后完成的配置:
springboot项目,logback保存日志到数据库主要代码

和其他贴子一样,都是自定义LogDBAppender,其中getGeneratedKeys这个方法,是需要数据配置主键才会生效,否则不会执行插入SQL操作;

LogDBAppender.java

/**
 * @author zengwei
 * @email 1014483974@qq.com
 * @date 2020/7/21
 */
PreparedStatement.class.getMethod("getGeneratedKeys", (Class[]) null);

我这边用的是UUID做主键,所以这行代码注释掉;

/**
 * @author zengwei
 * @email 1014483974@qq.com
 * @date 2020/7/21
 */
static {
    // PreparedStatement.getGeneratedKeys() method was added in JDK 1.4
    Method getGeneratedKeysMethod = null;
    try {
        // 不需要主键自增
		// getGeneratedKeysMethod = PreparedStatement.class.getMethod("getGeneratedKeys", (Class[]) null);
    } catch (Exception ex) {
        getGeneratedKeysMethod = null;
    }
    GET_GENERATED_KEYS_METHOD = getGeneratedKeysMethod;
}

自定义SQL,主键使用UUID

/**
 * @author zengwei
 * @email 1014483974@qq.com
 * @date 2020/7/21
 */
private static String buildInsertSQL() {
    StringBuffer str = new StringBuffer();
    str.append("INSERT INTO `log` (`id`, `created_by`, `created_time`, `status`, `version`, `operator`, `matter`, `params`)");
    str.append("VALUES (REPLACE(UUID(),'-',''), 'system', now(), 1, 1, ?, ?, ?)");
    return str.toString();
}

pom.xml

使用Druid连接池

<!-- Druid连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.10</version>
</dependency>

logback-spring.xml

 <!--连接数据库配置-->
<appender name="DbAppender" class="com.config.LogDBAppender">
     <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
         <dataSource class="com.alibaba.druid.pool.DruidDataSource">
             <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
             <url>${MYSQL_URL}</url>
             <username>${MYSQL_USERNAME}</username>
             <password>${MYSQL_PASSWORD}</password>
         </dataSource>
     </connectionSource>
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
         <level>INFO</level>
     </filter>
</appender>
	
<!-- 日志输出级别 -->
<root level="info">
    <appender-ref ref="DbAppender"/>
</root>

在项目中log.info()就能完成日志保存数据库操作

log.info("日志输出到数据库");

如果控制台会一直报错,就取消勾选这两个选项;
在这里插入图片描述

整理的靠谱的软件试玩平台,已亲测能提现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值