spring boot集成logback到mysql 8

news2025/5/28 1:24:06

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>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

上位机图像处理和嵌入式模块部署(镜头和相机的选择)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在机器视觉当中&#xff0c;除了光源比较重要之外&#xff0c;另外最最重要的就是镜头和相机的选择了。通常来说&#xff0c;镜头是机械和光学装置…

【算法】分治-快排

个人主页 &#xff1a; zxctscl 如有转载请先通知 题目 前言1. 75. 颜色分类1.1 分析1.2 代码 2. 912. 排序数组2.1 分析2.2 代码 3. 215. 数组中的第K个最大元素3.1 分析3.2 代码 4. LCR 159. 库存管理 III4.1 分析4.2 代码 前言 分治就是分而治之 1. 75. 颜色分类 1.1 分析…

解决vue3更新chunk包后,点击页面报错

出现错误 解决思路 试了好多方法&#xff0c;跳了很多坑&#xff0c;router版本对不上&#xff0c;解决方案不实用。最后我直接捕获异常&#xff0c;刷新页面&#xff0c;解决最快最有效。 // vue-rotuer版本 "vue-router": "^4.0.3"解决方案 在router/…

(学习日记)2024.04.18:UCOSIII第四十六节:CPU利用率及栈检测统计

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

【iOS ARKit】Web 网页中嵌入 AR Quick Look

在支持 ARKit 的设备上&#xff0c;iOS 12 及以上版本系统中的 Safari浏览器支持 AR Quick Look&#xff0c; 因此可以通过浏览器直接使用3D/AR 的方式展示 Web 页面中的模型文件&#xff0c;目前 Web 版本的AR Quick Look 支持USDZ 格式文件。苹果公司有一个自建的3D模型示例库…

社交革命的引领者:探索Facebook的创新策略

1. 引言&#xff1a;社交媒体的崛起 社交媒体的兴起标志着信息时代的到来&#xff0c;它不仅改变了人们的生活方式&#xff0c;也影响着整个社会结构。作为社交媒体的先驱者&#xff0c;Facebook以其创新的策略和领先的技术&#xff0c;成为了这场社交革命的引领者。从2004年马…

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 …

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

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

读所罗门的密码笔记19_治理模式

1. 解决方案 1.1. 全球人工智能的环境错综复杂&#xff0c;它严重依赖于价值观&#xff0c;且关系重大 1.2. 即使是与大家同仇敌忾的问题做斗争&#xff0c;也往往无法在国际社会中取得最佳效果 1.3. OPCW&#xff08;禁止化学武器组织&#xff09;已经帮助限制了化学武器的…

【嵌入式基础知识学习】AD/DA—数模/模数转换

AD/DA—数模/模数转换概念 数字电路只能处理二进制数字信号&#xff0c;而声音、温度、速度和光线等都是模拟量&#xff0c;利用相应的传感器&#xff08;如声音用话筒&#xff09;可以将它们转换成模拟信号&#xff0c;然后由A/D转换器将它们转换成二进制数字信号&#xff0c…

每日一题---移除元素

文章目录 1.题目名称2.题目思路2.1.思路1:2.2.思路2&#xff1a; 3.参考代码 每日一题—移除元素 1.题目名称 2.题目思路 2.1.思路1: 创建一个新的数组&#xff0c;将值不为val的放到新的数组&#xff0c;然后在返回新的数组的大小&#xff0c;但是题目专门说啦&#xff0c;这…

r3live 使用前提 雷达-相机外参标定 livox_camera_lidar_calibration

标定的是相机到雷达的,R3live下面配置的雷达到相机的,所以要把得到外参旋转矩阵求逆,再填入,平移矩阵则取负 港科大livox_camera_calib虽然操作方便&#xff0c;但是使用mid360雷达会有视角问题&#xff08;投影三维点到相机&#xff09;&#xff0c;尝试了很多场景&#xff0c…

连接参数a和b operator.concat(a, b)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 连接参数a和b operator.concat(a, b) [太阳]选择题 以下关于operator.concat()的功能和作用说法正确的是&#xff1a; import operator print("【执行】operator.concat(Hello, World)&q…

蓝桥杯嵌入式(G431)备赛笔记——DMA+ADC(单通道+多通道)

单通道&#xff1a; 开启循环模式&#xff0c;两个参数设为word u32 adc_tick0; u32 r37_value0; u32 r38_value0; float r37_volt0; float r38_volt0;//DMAADCvoid DMA_ADC() {if(uwTick-adc_tick<100) return;adc_tick uwTick;HAL_ADC_Start_DMA(&hadc2, &r37_v…

宝藏免费音乐软件LX music

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 宝藏免费音乐软件LX music 前言LX Music的特色功能&#xff1a;音乐播放的新境界安装与配置&#xff1a;在不同平台上使用LX Music下载页面 主题定制 本文将深入研究LX Music&#xff0c;一款备受欢迎…

2024/4/11 直流电机调速/PWM

一、直流电机简介和PWM原理 直流电机是一种将电能转换为机械能的装置。一般的直流电机有两个电极&#xff0c;当电极正接时&#xff0c;电机正转&#xff0c;当电极反接时&#xff0c;电机反转 直流电机主要由永磁体&#xff08;定子&#xff09;、线圈&#xff08;转子&…

一招将vscode自动补全的双引号改为单引号

打开设置&#xff0c;搜索quote&#xff0c;在结果的HTML选项下找到自动完成&#xff0c;设置默认引号类型即可。 vscode版本&#xff1a;1.88.1&#xff0c; vscode更新日期&#xff1a;2024-4-10

2款Notepad++平替工具(实用、跨平台的文本编辑器)

前言 今天大姚给大家分享2款Notepad平替工具&#xff0c;实用、跨平台&#xff08;支持Window/MacOS/Linux操作系统平台&#xff09;的文本编辑器。 NotepadNext NotepadNext是一个跨平台的 Notepad 的重新实现。开发是使用 QtCreator 和 Microsft Visual C (msvc) 编译器完…

tested4142

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…