天天看点

logback之Slf4J日志写入数据库一.日志入库

文章目录

  • 一.日志入库
    • 1. 1 相关依赖引入
    • 1.2 创建日志表
    • 定时任务删除部分

一.日志入库

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语句在图中位置可以找到

logback之Slf4J日志写入数据库一.日志入库

配置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">-->
<!--            &lt;!&ndash;文件路径:可使用ognl&ndash;&gt;-->
<!--            <fileNamePattern>${LOG_PATH}/info.%d{yyyy-MM-dd}.%i.log</fileNamePattern>-->
<!--            &lt;!&ndash;每个文件最大100MB;保存60天;总文件最多20GB&ndash;&gt;-->
<!--            <maxFileSize>100MB</maxFileSize>-->
<!--            <maxHistory>60</maxHistory>-->
<!--            <totalSizeCap>20GB</totalSizeCap>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <charset>UTF-8</charset>-->
<!--            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}-&#45;&#45;%magenta([%thread])-&#45;&#45;%-5level-&#45;&#45;%blue([%c])-&#45;&#45;%green([%L])-&#45;&#45;[%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>
           
logback之Slf4J日志写入数据库一.日志入库

定时任务删除部分

详见这位博主.也可写相关后台接口控制;或系统级定时任务