1. DBAppender把记录事件写入数据库的三张表。三张表分别是logging_event、logging_event_property和logging_event_exception。在使用DBAppender之前, 这三张表必须已经被创建。Logback提供创建这些表的SQL脚本, 位于logback-classic/src/main/java/ch/qos/logback/classic/db/script目录, 对各个流行数据库分别有一个脚本。如果没有你想用的数据库的脚本, 那就按照现有的脚本自己写吧。

2. 创建表

2.1. logback提供的mysql.sql

2.2. logback提供的创建mysql数据库表代码

BEGIN;
DROP TABLE IF EXISTS logging_event_property;
DROP TABLE IF EXISTS logging_event_exception;
DROP TABLE IF EXISTS logging_event;
COMMIT;BEGIN;
CREATE TABLE logging_event (timestmp         BIGINT NOT NULL,formatted_message  TEXT NOT NULL,logger_name       VARCHAR(254) NOT NULL,level_string      VARCHAR(254) NOT NULL,thread_name       VARCHAR(254),reference_flag    SMALLINT,arg0              VARCHAR(254),arg1              VARCHAR(254),arg2              VARCHAR(254),arg3              VARCHAR(254),caller_filename   VARCHAR(254) NOT NULL,caller_class      VARCHAR(254) NOT NULL,caller_method     VARCHAR(254) NOT NULL,caller_line       CHAR(4) NOT NULL,event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
COMMIT;BEGIN;
CREATE TABLE logging_event_property(event_id          BIGINT NOT NULL,mapped_key        VARCHAR(254) NOT NULL,mapped_value      TEXT,PRIMARY KEY(event_id, mapped_key),FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
COMMIT;BEGIN;
CREATE TABLE logging_event_exception(event_id         BIGINT NOT NULL,i                SMALLINT NOT NULL,trace_line       VARCHAR(254) NOT NULL,PRIMARY KEY(event_id, i),FOREIGN KEY (event_id) REFERENCES logging_event(event_id));
COMMIT;

2.3. 拷贝sql代码到Navicat编辑器里执行

2.4. 表创建完成

2.5. 表logging_event字段和含义

2.6. 表logging_event_property字段和含义, 用于存储包含在MDC或上下文里的键和值

2.7. 表logging_event_exception字段和含义

3. ConnectionSource接口和派生类

3.1. logback的ConnectionSource接口提供了一种可插拔地、透明地获取JDBC连接的方法。现在有三种具体实现: DataSourceConnectionSource、DriverManagerConnectionSource和JNDIConnectionSource。

3.2. ConnectionSource接口

3.3. DriverManagerConnectionSource是ConnectionSource的一个实现, 以传统的JDBC方式从连接URL里取得连接。

3.4. 注意DriverManagerConnectionSource会在每次调用getConnection()方法时建立一个新连接。

3.5. DriverManagerConnectionSource配置

<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://192.168.25.138:3306/studyjdbc?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</url>    <user>root</user>    <password>lyw123456</password>   </connectionSource>
</appender>

4. 连接池

4.1. 记录事件有时创建得很快。为了来得及插入数据库, 推荐为DBAppender使用连接池。

4.2. 使用DataSourceConnectionSource可以配置连接池, 推荐使用c3p0。

4.3. 新建一个名为DBAppender的Java项目, 同时添加相关jar包

4.4. 在src目录下编辑loback.xml

<configuration debug="true"><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="db" class="ch.qos.logback.classic.db.DBAppender"><connectionSource class="ch.qos.logback.core.db.DataSourceConnectionSource">   <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource">  <driverClass>com.mysql.cj.jdbc.Driver</driverClass>    <jdbcUrl>jdbc:mysql://192.168.25.138:3306/studyjdbc?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=Asia/Shanghai</jdbcUrl>    <user>root</user>    <password>lyw123456</password></dataSource>   </connectionSource></appender><root level="debug"><appender-ref ref="db" /><appender-ref ref="stdout" /></root></configuration>

4.5. 编辑MyDb.java

package com.zr.mail;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class MyDb {private static final Logger logger = LoggerFactory.getLogger(MyDb.class);public static void main(String[] args) {logger.trace("向数据库写入一个跟踪信息");logger.debug("向数据库写入一个测试信息");logger.info("向数据库写入一个日志信息");logger.warn("向数据库写入一个警告信息");logger.error("向数据库写入一个错误信息");}
}

4.6. 运行项目

4.7. 插入数据库数据

012_logback中的DBAppender相关推荐

  1. SpringBoot中Logback常用配置以及自定义输出到MySql数据库

    之前基于SpringBoot开发的项目运行一段时间后,客户使用网站偶尔会出现接口调用失败的情况,每次产品经理询问是怎么回事的时候,都需要让运维提下最近的日志才能分析具体原因,这样时效性和便利性不能满足 ...

  2. GNU Make 使用手册(于凤昌中译版)

    GNU Make 使用手册(中译版) 翻译:于凤昌 GNU make Version 3.79 April 2000 Richard M. Stallman and Roland McGrath 1 ...

  3. Logback学习笔记1

    Logback介绍 Logback 分为三个模块:Core.Classic 和 Access.Core模块是其他两个模块的基础. Classic模块扩展了core模块. Classic模块相当于log ...

  4. Logback第四章:Appenders

    第四章:Appenders 什么是 Appender logback 将写入日志事件的任务委托给一个名为 appender 的组件.Appender 必须实现 ch.qos.logback.core. ...

  5. 面试:第十二章:所有总结

    Java基础 java基本类型哪些,所占字节 byte :1个字节 short :2个字节 char :2个字节 int :4个字节 long :8个字节 float :4个字节 double :8个 ...

  6. linux内核分析(转自某位大哥网上的笔记)

    启动 当PC启动时,Intel系列的CPU首先进入的是实模式,并开始执行位于地址0xFFFF0处的代码,也就是ROM-BIOS起始位置的代码.BIOS先进行一系列的系统自检,然后初始化位于地址0的中断 ...

  7. java webproject中logback换配置文件的路径

    java webproject中logback换配置文件的路径 本人小站点:   http://51kxd.com/  欢迎大家不开心的时候訪问訪问,调节一下心情 web.xml中配置: <!- ...

  8. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  9. 总结一下在使用某里云服务器的过程中出现过的一些问题

    此文总结在使用阿里云的过程中出现过的问题   想起来就记录一下 本人为言行负责! 海内选择腾讯华为,共勉! k8s不同命名空间的配置文件串掉了 k8s集群服务器购买上后,无法使用外网.连续购买了4台然 ...

最新文章

  1. Ubuntu18.04安装教程及SLAM常用软件安装教程
  2. rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较
  3. 终身学习这件事,比你想的还要重要
  4. 又掌握了一项新技能 - 断点调试 Gradle 插件
  5. 报表设计器条形码支持类型
  6. 最快解决在win下杀死端口号的方式
  7. Linux 指令简单将***IP列入iptables 限制范围
  8. OPPO K3将登陆印度市场 高性价比能否占据一席之地
  9. Integer和int的区别
  10. 推荐Python互动艺术在线编辑器(腾讯扣叮)
  11. LTE学习:传输块大小的计算
  12. MySQL 是怎么死锁的?
  13. 无需软件实现QQ空间秒赞以及赞空间全部说说
  14. WAV音频文件格式介绍
  15. 小米4android8.0root,小米小米 5X(安卓8.0)手机完美获取root教程,最强root工具,亲测可用!...
  16. Linux系统软件安装
  17. 使用scrapy爬取拉钩网招聘信息
  18. 关闭iOS上京东app不停询问“京东想从MF839粘贴”,您允许这样做吗? - 允许iphone应用访问剪切板
  19. 对软件项目开发的一点思考
  20. Keras 在windows环境下安装配置教程

热门文章

  1. java并发编程实践 part 01 --gt; 线程创建方式
  2. SQL Server 2012 AlwaysOn高可用配置之八:新建可用性组
  3. Latex \section 使用中文
  4. 获取前台HTML控件的值(select)
  5. Windows 中的磁盘阵列
  6. Qt vlc视频开发libvlc_new返回空的问题
  7. .net API跨域
  8. Undefined、Null区别渗透
  9. bootstrap基础
  10. layer.js载入失效问题