赞
踩
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&useUnicode=true&characterEncoding=utf-8&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&useUnicode=true&characterEncoding=utf-8&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. 插入数据库数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。