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("日志输出到数据库");
如果控制台会一直报错,就取消勾选这两个选项;