Spring Boot 多线程开发之异步日志

时间:2022-12-15 23:15:48

背景

最近在进行大量数据的清洗和转换工作,因为涉及的数据量和表的个数较多,采用线程池的方式来进行多线程跑批处理。每个表和每个数据的清洗是不同的线程,一旦发生异常,需要快速排查某个现场的执行异常,采用传统的文本来进行排查或者通过日志解析后来排查,排查效率是非常低下的。如果可以通过数据的日志来排查呢?是否更加简单快捷?

Spring Boot 多线程开发之异步日志

工具选型

通过考虑,log4j2和logback都能够支持异步输出到DB的。笔者选用的是logback,主要是因为spring boot admin支持对logback进行日志级别的动态控制。

Spring Boot 多线程开发之异步日志

Spring Boot 多线程开发之异步日志

配置步骤

Mave依赖

1、spring boot
1、spring boot admin 依赖

 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.2.RELEASE</version> </parent> <properties> <java.version>1.7</java.version> <boot.admin.version>1.4.2</boot.admin.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency  <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server</artifactId> <version>${boot.admin.version}</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-server-ui</artifactId> <version>${boot.admin.version}</version> </dependency> <dependency> <groupId>de.codecentric</groupId> <artifactId>spring-boot-admin-starter-client</artifactId> <version>${boot.admin.version}</version> </dependency> <dependencies>

2、logback数据库操作依赖

        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0</version>
        </dependency>

配置

1、application.yml

logging:
    level:
        tk.mybatis: DEBUG
    path: /log
server:
    port: 8080
spring:
    application:
        name: ace-admin
    boot:
        admin:
             url: http://localhost:${server.port}

2、logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="oracle" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">
            <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">
                <driverClass>oracle.jdbc.driver.OracleDriver</driverClass>
                <jdbcUrl>jdbc:oracle:thin:@//localhost:1521/xxx</jdbcUrl>
                <user>xxxx</user>
                <password>xxxx</password>
            </dataSource>
        </connectionSource>
    </appender>
    <!-- 针对性配置需要输出到数据库的包目录和日志初始级别 -->
    <logger name="com.github.wxiaoqi.security" level="debug">
        <appender-ref ref="oracle" />
    </logger>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <jmxConfigurator/>
</configuration>

数据库准备

logback数据库脚本下载

验证

spring boot admin验证

访问地址:http://localhost:8080/

Spring Boot 多线程开发之异步日志

logback db输出日志验证

根据日志输出的需要,配置(logback.xml)需要往数据库输出的日志的包路径和级别。

    <logger name="com.github.wxiaoqi.security" level="debug">
        <appender-ref ref="oracle" />
    </logger>