logback自定义生成DB日志(java环境)

目的:

未来在生成日志写入数据库中加一个特殊的字段,官方老版本提供的DBAppender无法实现,并且好巧不巧,在新版本这个实现也被删除了,所以重写一个实现。
在这里插入图片描述
在这里插入图片描述

1. 安装依赖

  1. 安装logback maven依赖

注意:

  1. logback至少要升级到1.2.9,因为在此之前有漏洞
  2. 后续版本删除了项目中所有与数据库(JDBC)相关的代码,需要额外安装关于数据库和logback协同的依赖

如果是springboot我们就不需要安装core依赖,因为springboot内置的日志就是logback。
在这里插入图片描述

<!--        logback DB依赖-->
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.4.14</version>
</dependency><dependency><groupId>ch.qos.logback.db</groupId><artifactId>logback-core-db</artifactId><version>1.2.11.1</version></dependency>

2. 实现CustomDBAppender。

如果是老版本的话,在logback中是有一个DBAppender extends DBAppenderBase,在后续版本中貌似已经被移除需要手动实现。
在这里插入图片描述

当然这和我们没关系,本来就是要自定义,手动实现未尝不可。
  1. 我们注意到主要有getGeneratedKeysMethod(),getInsertSQL(),subAppend(),secondarySubAppend()方法,我们简单说下作用。
    在这里插入图片描述
  • getGeneratedKeysMethod()这个方法用于获取 PreparedStatement.getGeneratedKeys 方法的反射引用,这主要用于获取数据库插入操作生成的主键值。
    这在日志事件插入数据库并需要获取插入记录的主键时非常有用。

  • getInsertSQL()此方法应返回用于插入日志事件到数据库的 SQL 语句。这是一个核心方法,因为它直接定义了如何将日志数据存储到数据库中。
    根据你的数据库表结构和需要存储的日志信息,编写并返回相应的 SQL 插入语句。

  • subAppend(ILoggingEvent event, Connection connection, PreparedStatement preparedStatement)这个方法实现了将日志事件数据绑定到预编译的 SQL 语句(PreparedStatement)并执行插入操作的逻辑
    它是日志事件存储过程的核心部分。

  • secondarySubAppend(ILoggingEvent event, Connection connection, long eventId)这个方法用于执行与主插入操作相关的次要数据库操作,例如插入日志事件的异常信息或自定义属性。eventId 通常是主日志事件插入操作生成的主键
    如果你的日志记录需求包括存储额外的事件相关信息(如异常信息),你应该在这里实现这些信息的数据库插入逻辑。

  1. 弄清基本作用,过程就很简单了,我们不需要获取主键,日志sql写死
  2. getGeneratedKeysMethod()方法直接返回null就行
protected Method getGeneratedKeysMethod() {return null;}
  1. getInsertSQL()就是在原来官方sql基础上,删了4个arg,删掉了reference_flag(如果不考虑复杂的日志功能的话),添加了podname
@Overrideprotected String getInsertSQL() {return "INSERT INTO logging_event (timestmp, formatted_message, logger_name, level_string, thread_name, reference_flag, caller_filename, caller_class, caller_method, caller_line, pod_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";}
  1. secondarySubAppend(ILoggingEvent iLoggingEvent, Connection connection, long l),也直接不用管就行,如果没有其他相关逻辑的话。
protected void secondarySubAppend(ILoggingEvent iLoggingEvent, Connection connection, long l) throws Throwable {}

在这里插入图片描述

  1. 一共就实现了getInsertSQL(),subAppend()两个方法,是不是特别简单?

  2. 配置logback.xml

<configuration><!-- Console appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><!-- DB appender -->
<appender name="DB" class="com.chen.behindimagesmanage.config.CustomDBAppender"><connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"><driverClass>com.mysql.cj.jdbc.Driver</driverClass><url>jdbc:mysql://192.168.0.254:3306/image_manage?serverTimezone=Asia/Shanghai</url><user>root</user><password>123456</password></connectionSource>
</appender><!-- Root logger -->
<root level="INFO"><appender-ref ref="STDOUT" /><appender-ref ref="DB" />
</root></configuration>

在这里插入图片描述

在这里插入图片描述

总结:

实际上这个东西的核心就是设置一个预编译的sql,也就是实现subAppend(ILoggingEvent event, Connection connection, PreparedStatement stmt)方法,就是jdbc的简单应用,理解过程就很简单。

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

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

相关文章

数据结构——实验01-线性表的链式存储和操作

一、实验内容 二、算法思想与算法实现 1、解题思想 &#xff08;1&#xff09;逆序创建链表La就是使用头插法创建一个链表&#xff0c;所谓头插法就是在创建链表时始终将新元素插入到头结点之后&#xff0c;而正序创建链表Lb就是使用尾插法创建一个链表&#xff0c;所谓尾插法…

[高阶·产品经理]业务建模和需求高阶2月26-3月1日晚8点

等级 高阶 介绍 软件开发中&#xff0c;需求是解决“系统怎样好卖”的问题&#xff0c;设计是解决“降低开发成本”的问题。 本训练聚焦第一个方面&#xff0c;在点上强化业务建模和需求的技能。每期的教材都会根据当期学员所整理的学习《软件方法》的过程中以及工作中碰到的…

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda&#xff08;2023.9&#xff09;详解&#xff08;不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等&#xff09;连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全&#xff08;create/in…

产品经理必备知识——API接口(获取电商商品订单数据API)

前言 在古代&#xff0c;我们的传输信息的方式有很多&#xff0c;比如写信、飞鸽传书&#xff0c;以及在战争中使用的烽烟&#xff0c;才有了著名的烽火戏诸侯&#xff0c;但这些方式传输信息的效率终究还是无法满足高速发展的社会需要。如今万物互联的时代&#xff0c;我通过…

网络安全之漏洞扫描

漏洞是在硬件、软件、协议的具体实现或系统安全策略上存在的缺陷&#xff0c;从而可以使攻击者能够在未授权的情况下访问或破坏系统。这些缺陷、错误或不合理之处可能被有意或无意地利用&#xff0c;从而对一个组织的资产或运行造成不利影响&#xff0c;如信息系统被攻击或控制…

关于node.js奇数版本不稳定 将11.x.x升级至16.x.x不成功的一系列问题(一)

据说vue2用16稳定一些 vue3用18好一点&#xff08;但之前我vue3用的16.18.1也可以&#xff09; 为维护之前的老项目 先搞定node版本切换 下载nvm node版本管理工具 https://github.com/coreybutler/nvm-windows/releases 用这个nvm-setup.zip安装包 安之前最好先将之前的nod…

基于WordPress开发微信小程序2:决定开发一个wordpress主题

上一篇&#xff1a;基于WordPress开发微信小程序1&#xff1a;搭建Wordpress-CSDN博客 很快发现一个问题&#xff0c;如果使用别人的主题模板&#xff0c;多多少少存在麻烦&#xff0c;所以一咬牙&#xff0c;决定自己开发一个主题模板&#xff0c;并且开源在gitee上&#xff…

计算机网络自顶向下Wireshark labs-HTTP

我直接翻译并在题目下面直接下我的答案了。 1.基本HTTP GET/response交互 我们开始探索HTTP&#xff0c;方法是下载一个非常简单的HTML文件 非常短&#xff0c;并且不包含嵌入的对象。执行以下操作&#xff1a; 启动您的浏览器。启动Wireshark数据包嗅探器&#xff0c;如Wir…

2024年美国大学生数学建模竞赛(E题)财产保险建模|MCDA/随机森林建模解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮500人完成了建模与思路的构建的处理了&#xff5e; 本文运用利用时间序列和强化学习结合DQN算法&#xff0c;解决保险业可持续性问题&#xff1b;采用MCDA和随机森林&#xff0c;应对地产业保险挑战&…

电脑怎么录屏?打造专业级视频内容!

随着科技的进步&#xff0c;电脑已经深入到我们的日常生活和工作中。而在这个数字时代&#xff0c;录制屏幕内容变得日益重要。无论是制作教程、分享游戏技巧&#xff0c;还是记录重要的演示&#xff0c;录屏都是一个不可或缺的功能。可是电脑怎么录屏呢&#xff1f;本文将深入…

Cmake语法学习3:语法

1.双引号 1.1 命令参数 1&#xff09;介绍 命令中多个参数之间使用空格进行分隔&#xff0c;而 cmake 会将双引号引起来的内容作为一个整体&#xff0c;当它当成一个参数&#xff0c;假如你的参数中有空格&#xff08;空格是参数的一部分&#xff09;&#xff0c;那么就可以使…

国自然结题报告为什么不能下载?如何解决

一直以来&#xff0c;国自然的结题报告都不是只能在线查看&#xff0c;这给很多科研人员带来一些不方便&#xff0c;因为在线查看的话&#xff0c;受限于网络&#xff0c;必须有网的时候才能看&#xff0c;并且官方网站的响应比较慢&#xff0c;想快速翻页&#xff0c;基本不可…

【Java程序设计】【C00240】基于Springboot的班级综合测评管理系统(有论文)

基于Springboot的班级综合测评管理系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的班级综合测评管理系统 本系统分为学生功能模块、管理员功能模块以及教师功能模块。 管理员功能模块&#xff1a;管理员功能…

MySQL学习记录——일 MySQL 安装、配置

文章目录 1、卸载内置环境2、安装MySQL3、启动4、登录5、配置my.cnf 当前环境是1核2G云服务器&#xff0c;CentOS7.6。要在root用户下进行操作 1、卸载内置环境 云服务器中有可能会自带mysql还有mariadb这样的数据库服务&#xff0c;在安装我们mysql前&#xff0c;得先查找一下…

迪文串口屏数据的隐藏功能

一、概述 由于项目中在使用迪文屏显示数据的时候&#xff0c;需要在数据为0的时候不显示0&#xff0c;而迪文屏默认的数据变量在无值的时候显示为0&#xff0c;此时可以使用数据的隐藏功能指令 二、具体实现方法 1、可以使用描述指针地址来实现数据的隐藏&#xff0c;查看应用…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

Ubuntu 添加字体

Ubuntu 添加字体 Ubuntu如何添加新的字体&#xff1f;似乎远远没有Windows方便呀&#xff0c;查询了一些资料&#xff0c;与大家分享。 方法1 根据字体名称直接安装 oyroy-FMVU08001:~$ sudo apt-get install fonts-wqy-zenhei [sudo] roy 的密码&#xff1a; 正在读取软件…

2024美赛D题完整四小问代码+数据集+22页成品参考论文

D题&#xff08;文末获取完整版的&#xff09; 题目三&#xff1a;新控制方法是否会让各利益相关者满意或优于当年实际记录的 水位? 解题思路 问题 3 要求我们理解控制算法对两座控制大坝流出量的敏感性&#xff0c;并利用 2017 年 的数据来验证新控制措施是否能为各方利益相关…

第二代视频换脸工具facefusion

GitHub - facefusion/facefusion: Next generation face swapper and enhancer官方地址 1.环境安装 Windows - FaceFusion Windows Python winget install -e --id Python.Python.3.10 PIP python -m ensurepip --upgrade GIT winget install -e --id Git.Git

【奶奶看了都会】《幻兽帕鲁》云服务器部署教程

在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。帕鲁可以进行战斗、繁殖、协助你做农活&#xff0c;也可以为你在工厂工作。你也可以将它们进行售卖&#xff0c;或肢解后食用。 《幻兽帕鲁》官…