一.日志入库
1. 1 相关依赖引入
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<!--slf4j日志写入数据库的依赖-->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.7</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.11</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
注意logback-classic,logback-core其他版本截至目前最新的1.4.11版出现巨大变动...dbAppender找不到了
1.2 创建日志表
创建数据库logback_test,以及三个表logging_event_property, logging_event_exception, logging_event:
建表的SQL语句在图中位置可以找到
配置logging参数
logging.config=classpath:logback-spring.xml
logging.datasource.type=com.alibaba.druid.pool.DruidDataSource
logging.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
logging.datasource.username=root
logging.datasource.password=123456
# 初始数据库表
spring.sql.init.schema-locations=classpath*:schema.sql;classpath:data/mysql-log.sql
# 初始数据库插入语句
spring.sql.init.data-locations=classpath*:data.sql
# 默认基于内存数据初始化更新.
# 修改为always. 之后应当关闭.否则每次运行都会初始化
spring.sql.init.mode=embedded
配置logback-spring.xml入库参数
必须以logback-spring命名.spring集成了如果项目中配置的日志文件的名称是logback.xml的话,logback会先与Spring之前加载日志配置,这时日志文件中的springProfile的配置是无效的。按照官方文档的说法将logback.xml改为logback-spring.xml就可以了
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>
<springProperty scope="context" name="LOG_FILE" source="logging.path"/>
<springProperty scope="context" name="ServerPort" source="server.port"/>
<!-- 引用默认的appender Spring Boot2.7 的默认 logback 配置文件的方法 -->
<include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
<!-- 1.控制台输出日志 ConsoleAppender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder 默认配置为PatternLayoutEncoder -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}---%magenta([%thread])---%-5level---%blue([%c])---%green([%L])---[%msg]%n</pattern>
</encoder>
</appender>
<!-- 2.输出到文件 -->
<!-- <appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!-- <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">-->
<!-- <!–文件路径:可使用ognl–>-->
<!-- <fileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!-- <!–每个文件最大100MB;保存60天;总文件最多20GB–>-->
<!-- <maxFileSize>100MB</maxFileSize>-->
<!-- <maxHistory>60</maxHistory>-->
<!-- <totalSizeCap>20GB</totalSizeCap>-->
<!-- </rollingPolicy>-->
<!-- <encoder>-->
<!-- <charset>UTF-8</charset>-->
<!-- <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}---%magenta([%thread])---%-5level---%blue([%c])---%green([%L])---[%msg]%n</pattern>-->
<!-- </encoder>-->
<!-- </appender>-->
<!-- 配置属性 -->
<springProperty scope="context" name="JDBC_URL" source="logging.datasource.url"/>
<springProperty scope="context" name="USER_NAME" source="logging.datasource.username"/>
<springProperty scope="context" name="PASSWORD" source="logging.datasource.password"/>
<springProperty scope="context" name="DATA_SOURCE" source="logging.datasource.type"/>
<springProperty scope="context" name="DATA_DRIVER" source="logging.datasource.driver"/>
<!-- 写入到数据库 -->
<appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
<connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
<dataSource class="${DATA_SOURCE}">
<driverClassName>${DATA_DRIVER}</driverClassName>
<url>${JDBC_URL}</url>
<username>${USER_NAME}</username> <!-- 数据库用户名 -->
<password>${PASSWORD}</password> <!-- 密码 -->
</dataSource>
</connectionSource>
</appender>
<!-- 线上环境,日志配置 -->
<springProfile name="prod">
<root level="INFO">
<!-- <appender-ref ref="CONSOLE"/>-->
<appender-ref ref="DB"/>
<appender-ref ref="STDOUT" />
<!--日志输出到文件-->
<!-- <appender-ref ref="rollingFile"/>-->
</root>
</springProfile>
<!-- 本地、开发环境,日志配置 可以写logback支持的所有节点 -->
<springProfile name="dev,test">
<root level="INFO">
<appender-ref ref="STDOUT" />
<!--控制台日志:生产环境建议关掉-->
<appender-ref ref="CONSOLE"/>
<appender-ref ref="DB"/>
<!--日志输出到文件-->
<!-- <appender-ref ref="rollingFile"/>-->
</root>
</springProfile>
</configuration>
定时任务删除部分
详见这位博主.也可写相关后台接口控制;或系统级定时任务