spring boot集成logback到mysql 8

spring boot集成logback到mysql 8

  • 依赖
  • 数据库准备
    • 创建log日志用户,并创建数据库
    • 执行建表sql
  • 配置文件
  • bug
    • bug 1:Failed to instantiate type ch.qos.logback.classic.db.DBAppender
      • bug信息:
      • 解决:
    • bug2: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
      • bug信息
      • 原因
      • 解决

版本信息:

  1. springboot 3.2.4
  2. mysql 8.0.32-debian
  3. logback-classic:1.4.14
    在这里插入图片描述

依赖

	<!--logback 的依赖 springboot的starter已经包含了,所以不需要导入,如果不是springboot就导入下 -->
<!--
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.14</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.4.14</version>
        </dependency>
        
        -->
        
	<!-- https://mvnrepository.com/artifact/ch.qos.logback.db/logback-classic-db -->
	<!--如果要保存到数据库就需要以下依赖,不然会报没有DBAppender 的bug  -->
   <dependency>
            <groupId>ch.qos.logback.db</groupId>
            <artifactId>logback-classic-db</artifactId>
            <version>1.2.11.1</version>
        </dependency>
        
     <!-- MySQL Connector -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.12</version>
        </dependency>

数据库准备

创建log日志用户,并创建数据库

create user 'log'@'%' identified by '密码';
grant all on log.* to 'log'@'%';

select * from mysql.user; # 查看用户创建结果

create database log default charset utf8mb4; # 创建数据库

执行建表sql

logback-classic-db jar包 依赖下找到 建表sql,按照你的数据库框架选一个,如 mysql,选择如下:
在这里插入图片描述
tips:可以看到上图是有DBAppender这个类的,logback 高版本已经移除该类,所以才需要logback-classic-db 这个额外依赖

执行sql文件 :mysql.sql
在这里插入图片描述

配置文件

名称固定:logback-spring.xml
位置:classpath下都行,我放resources下

tip:logback-spring.xml 和 logback.xml 的区别:加载时机

  • logback-spring.xml:spring初始化完成后,所以可以使用spring的变量和bean之类的对象
  • logback.xml:spring 初始化之前,所以用不了spring的变量等
<configuration>

    <!-- 输出日志到数据库 -->
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>com.mysql.cj.jdbc.Driver</driverClass>
            <url>jdbc:mysql://mysql_ip:端口/数据库名称?useSSL=false</url>
            <user>xxx</user>
            <password>xxx</password>
        </connectionSource>
    </appender>

    <root level="INFO">
        <appender-ref ref="DB" />
    </root>
</configuration>

启动项目即可,日志已经导入msyql

在这里插入图片描述

bug

bug 1:Failed to instantiate type ch.qos.logback.classic.db.DBAppender

bug信息:

Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.model.processor.AppenderModelHandler - Could not create an Appender of type [ch.qos.logback.classic.db.DBAppender]. ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.db.DBAppender
ERROR in ch.qos.logback.core.model.processor.DefaultProcessor@5f172d4a - Failed to traverse model appender ch.qos.logback.core.model.processor.ModelHandlerException: ch.qos.logback.core.util.DynamicClassLoadingException: Failed to instantiate type ch.qos.logback.classic.db.DBAppender
	at org.springframework.boot.logging.logback.LogbackLoggingSystem.reportConfigurationErrorsIfNecessary(LogbackLoggingSystem.java:277)
	at org.springf

原因:没有DBAppender 或者 JDBCAppender之类的,logback高版本移除数据库保存的依赖问题

解决:

tips:解决后记得把sql 数据库删了重建,防止logback不同版本导致sql 表结构不同

1、导入缺失的依赖(推荐)

	<!-- https://mvnrepository.com/artifact/ch.qos.logback.db/logback-classic-db -->
	<!--如果要保存到数据库就需要以下依赖,不然会报没有DBAppender 的bug  -->
   <dependency>
            <groupId>ch.qos.logback.db</groupId>
            <artifactId>logback-classic-db</artifactId>
            <version>1.2.11.1</version>
        </dependency>

思路:到maven 仓库查找 DBAppender 或者 JDBCAppender的依赖,然后加入pom文件,或者直接下载jar依赖,保存到对应本地仓库位置(pom下载失败的时候)

2、降低logback版本(不推荐)
tips:logback-classic 1.2.3存在DBAppender 类,1.2.11之后都没有,中间没测
思路:

  1. 手动导入logback 低版本依赖
  2. 移除spring boot starter等其他内含的logback依赖 (maven依赖分析 + pom文件 exclusions)
  3. 导入低版本依赖后去jar包下检查是否存在 DBAppender类或者JDBCAppender类,确认该版本可用



bug2: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method and without a specific SQL dialect

bug信息

Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Could not initialize Logback logging from classpath:logback-spring.xml
...
...
Caused by: java.lang.IllegalStateException: DBAppender cannot function if the JDBC driver does not support getGeneratedKeys method *and* without a specific SQL dialect
...

原因

虚假原因(坑):数据库依赖不支持自增主键功能,或者没有指定sql方言
实际原因:logback-spring.xml 文件中 数据库配置有问题

神坑:该bug只要数据库连接配置有问题,哪怕class配置错了也都直接报这个,不会指出实际的问题

解决

检查下面代码配置项

  1. 标签名 :driverClass,url,user,password (好像不同版本,标签名还不太一样,如driverClass和driverClassName,user和username)
  2. :数据库用户名、密码、jdbc:mysql://mysql_ip:端口/数据库名称?useSSL=false
  3. 导入类名(细节处):ch.qos.logback.classic.db.DBAppender, ch.qos.logback.core.db.DriverManagerConnectionSource, com.mysql.cj.jdbc.Driver (如果有dataSource标签也记得检查class)
  4. 引用对应正确:appender-ref ref=“DB” 和 appender name=“DB”
 <configuration>

    <!-- 输出日志到数据库 -->
    <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">
        <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
            <driverClass>com.mysql.cj.jdbc.Driver</driverClass>
            <url>jdbc:mysql://mysql_ip:端口/数据库名称?useSSL=false</url>
            <user>xxx</user>
            <password>xxx</password>
        </connectionSource>
    </appender>

    <root level="INFO">
        <appender-ref ref="DB" />
    </root>
</configuration>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542127.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows SDK编程 --- 第一个程序

一、基础知识 1.Unicode 和 ANSI 在 Windows 编程中&#xff0c;Unicode 和 ANSI 是两种不同的字符编码方法&#xff0c;它们用于定义如何在计算机中表示和存储字符数据。 ANSI ANSI&#xff08;American National Standards Institute&#xff09;编码是一种基于单字节的字符…

最新视频理解大模型之MiniGPT4-video

前言 随着大模型的爆火&#xff0c;多模态大模型也随之卷了起来&#xff0c;基本每隔一小段时间就会冒出一个新模型。 今天给大家带来一个最新发现的关于视频理解的多模态大模型。 它的名字是MiniGPT4-video&#xff0c;可以看的出来其是MiniGPT4的一个分支&#xff1b;Mini…

vue3实现时钟效果

鼬鼬鼬鼬鼬被提需求了&#xff01;&#xff01;&#xff01; 产品&#xff1a;你学什么的&#xff1f; 我&#xff1a;跟CV有点关系 产品&#xff1a;control C加control V是吧 我&#xff1a;对对对 效果 时间实时变化&#xff1a; 页面部分 <template><div clas…

开源博客项目Blog .NET Core源码学习(14:App.Hosting项目结构分析-2)

开源博客项目Blog的前台页面&#xff08;如下图所示&#xff09;的控制器类保存在App.Hosting项目的Controllers文件夹内&#xff0c;页面保存在Views文件夹内&#xff0c;网页中使用的图标、js、css文件等保存在wwwroot文件中。 前台各个页面、Controller文件夹中的控制器类及…

Vue2电商前台项目(三):完成Search搜索模块业务

目录 一、请求数据并展示 1.写Search模块的接口 2.写Vuex中的search仓库&#xff08;三连环&#xff09; 3.组件拿到search仓库的数据 用getters简化仓库中的数据 4.渲染商品数据到页面 5.search模块根据不同的参数获取数据展示 &#xff08;1&#xff09;把派发action…

【c 语言】函数前面的返回类型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

大厂Java笔试题之统计兔子出生问题

题目&#xff1a;有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子…

vue3 vueUse 连接蓝牙

目录 vueuse安装&#xff1a; useBluetooth: 调用蓝牙API 扫描周期设备 选择设备配对 连接成功 vue3的网页项目连接电脑或者手机上的蓝牙设备&#xff0c;使用vueUse库&#xff0c;可以快速检查连接蓝牙设备。 vueUse库使用参考&#xff1a; VueUse工具库 常用api-CSDN…

ES6: promise对象与回调地狱

ES6&#xff1a; promise对象与回调地狱 一、回调地狱二、Promise概述三、Promise的组成四、用函数封装Promise读取文件操作 一、回调地狱 在js中大量使用回调函数进行异步操作&#xff0c;而异步操作什么时候返回结果是不可控的&#xff0c;所以希望一段程序按我们制定的顺序执…

中国省级人口结构数据集(2002-2022年)

01、数据简介 人口结构数据不仅反映了地域特色&#xff0c;更是预测地区未来发展趋势的重要工具。在这些数据中&#xff0c;总抚养比、少年儿童抚养比和老年人口抚养比是三大核心指标。 少儿抚养比0-14周岁人口数/15-64周岁人口数 老年抚养比65周岁及以上人口数/15-64周岁人…

Python | Leetcode Python题解之第27题移除元素

题目&#xff1a; 题解&#xff1a; class Solution:def removeElement(self, nums: List[int], val: int) -> int:a 0b 0while a < len(nums):if nums[a] ! val:nums[b] nums[a]b 1a 1return b

2023数据要素白皮书(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 【2023年数据资源入表白皮书】 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT解决方案&a…

03 Git 之 远程仓库 + IDEA 集成使用 GitHub

1. 远程仓库 origin&#xff1a;即远程仓库 url 的指代。 从网上随意 clone 一个仓库&#xff0c;进入 .git/config 文件, 即可编辑远程仓库的 url&#xff0c;也可以自定义想要指代该 url 的名词。 1.1 本地仓库绑定远程仓库 并 推送、拉取 git remote add 【想要起的指代…

Gradle 实战 - 启动main函数-ApiHug准备-工具篇-012

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace ApiHug …

RocketMQ底层原理及性能调优实战(二)

目录 1、RocketMQ源码分析 1-1、读源码前的思考 1-2、RocketMQ整体架构及连通性 1-3、RocketMQ核心组件及整体流程 1-4、NameServer源码分析 1-4-1、RocketMQ核心组件及整体流程 1-4-2、NameServer启动流程概要 1-4-3、Broker启动流程概要 1-4-4、Topic路由注册、剔除…

SpringBoot3整合Mybatis plus

Java版本&#xff1a;17 Spring Boot版本&#xff1a;3.1.10 Mybatis plus版本&#xff1a;3.5.5 源码地址&#xff1a;Gitee仓库 01 创建我们的项目工程 首先&#xff0c;我们创建一个maven工程spring-boot3-demo&#xff0c;pom文件配置如下。 这里我们将spring-boot-start…

AUTOSAR-COMStack-002_Update-Bit 机制

最近在工作中第一次使用了AUTOSAR COM Update-Bit功能&#xff0c;对使用了Update-Bit功能信号的使用&#xff0c;不能得心应手&#xff0c;发送信号比较顺利&#xff1b;测试接收信号功能时&#xff0c;对应的RTE接口始终不能接收到对应的模拟发送的信号值&#xff0c;后来翻阅…

004Node.js常用快捷键

1.常用的终端命令&#xff1a; &#xff08;1&#xff09;del 文件名&#xff1a; 删除文件 &#xff08;2&#xff09;ipconfig: 查看IP命令 &#xff08;3&#xff09;mkdir 目录名 &#xff1a;在当前目录新建指定目录 &#xff08;4&#xff09;rd 目录名&#xff1a;在当前…

Leetcode算法训练日记 | day25

一、组合总和Ⅲ 1.题目 Leetcode&#xff1a;第 216 题 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a; 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺…

标准孔板简单适应性强

即使生活一地鸡毛&#xff0c;但仍然要觉得未来可期&#xff0c;做自己而不是解释自己&#xff0c;只要能变好&#xff0c;慢点又如何&#xff0c;愿我们都是苦尽甘来的人&#xff0c;熬得住就出众&#xff0c;熬不住就出局&#xff0c;鹤壁永成矿山&#xff0c;在行业坚持十余…