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.DBAppenderat 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.hqwc.cn/news/616953.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一起学习python——基础篇(20)

前言&#xff0c;之前经常从网上找一些免费的接口来测试&#xff0c;有点受制于人的感觉。想了想还不如直接写一个接口&#xff0c;这样方便自己测试。自己想返回什么格式就返回什么样子&#xff0c;不用担心服务报错&#xff0c;因为自己就可以完全掌控。然后宿舍二哥告诉我py…

Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用&#xff1a;如何在Spring Boot中使用Hystrix&#xff1f; 引言 在微服务架构的发展过程中&#xff0c;面对复杂的服务依赖和不可预见的系统故障&#xff0c;如何提升系统的容错能力成为了一个非常急迫且重要的能力。 由 Netflix&#xff08;网飞&#xff09;公司…

觉得自己有讨好型人格,怎么办?

生活中&#xff0c;许多人可能有过这样的困扰&#xff1a; 不敢拒绝别人提出的要求&#xff0c;过于草率地作出承诺&#xff0c;等到发现自己无力兑现承诺&#xff0c;又不敢去面对现实、向别人道出真相&#xff0c;只好编造理由和借口来逃避承诺。 跟别人意见不一时&#xff0…

[MAUI]集成富文本编辑器Editor.js至.NET MAUI Blazor项目

文章目录 获取资源从源码构建从CDN获取获取扩展插件 创建项目创建控件创建Blazor组件初始化保存销毁编写渲染逻辑 实现只读/编辑功能切换模式获取只读模式状态响应切换事件 实现明/暗主题切换项目地址 Editor.js 是一个基于 Web 的所见即所得富文本编辑器&#xff0c;它由CodeX…

基于spring boot的农机电招平台

基于spring boot的农机电招平台系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表&#xff0c;进入对应的详细数据表&#xff0c;然后找到&#xff1a;www_96kaifa_com_enewsuser这个表&#xff0c;双击打开修改&…

tested4142

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

深度剖析Java中的String类

目录 引言 String类的特性 String类的部分实现代码&#xff1a; 不可变性&#xff1a; 补充&#xff1a; 常量池&#xff1a; 不可变性的好处 创建String对象 创建String对象的常用的三种方法如下&#xff1a; 使用常量串构造&#xff08;最常用&#xff09;&#xf…

Taichi库,一个最强渲染多功能的python库

Taichi库,一个最强渲染多功能的python库简称太极库 一个最强渲染多功能的python库—Taichi库 Taichi 是一个嵌入在 Python 中的领域特定语言&#xff08;DSL&#xff09;. Taichi 的主要功能之一是加速计算密集的 Python 程序,帮助这些程序 实现可以媲美 C/C 甚至 CUDA 的性能.…

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

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

Vitis HLS 学习笔记--ap_int.h / ap_fixed.h(1)

目录 目录 1. 概述 2. 简要规则 3. 浮点运算的复杂性 2.1 对阶 3.2 尾数运算 3.3 规格化和舍入 3.4 特殊值的处理 4. 示例&#xff08;ap_fixed.h&#xff09; 5. 量化模式&#xff08;ap_fixed.h&#xff09; 5.1 AP_SAT* 模式会增加资源用量 1. 概述 ap_int.h 和…