012_logback中的DBAppender
1. DBAppender把記錄事件寫入數(shù)據(jù)庫(kù)的三張表。三張表分別是logging_event、logging_event_property和logging_event_exception。在使用DBAppender之前, 這三張表必須已經(jīng)被創(chuàng)建。Logback提供創(chuàng)建這些表的SQL腳本, 位于logback-classic/src/main/java/ch/qos/logback/classic/db/script目錄, 對(duì)各個(gè)流行數(shù)據(jù)庫(kù)分別有一個(gè)腳本。如果沒有你想用的數(shù)據(jù)庫(kù)的腳本, 那就按照現(xiàn)有的腳本自己寫吧。
2. 創(chuàng)建表
2.1. logback提供的mysql.sql
2.2. logback提供的創(chuàng)建mysql數(shù)據(jù)庫(kù)表代碼
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編輯器里執(zhí)行
2.4. 表創(chuàng)建完成
2.5. 表logging_event字段和含義
2.6. 表logging_event_property字段和含義, 用于存儲(chǔ)包含在MDC或上下文里的鍵和值
2.7. 表logging_event_exception字段和含義
3. ConnectionSource接口和派生類
3.1. logback的ConnectionSource接口提供了一種可插拔地、透明地獲取JDBC連接的方法。現(xiàn)在有三種具體實(shí)現(xiàn): DataSourceConnectionSource、DriverManagerConnectionSource和JNDIConnectionSource。
3.2. ConnectionSource接口
3.3. DriverManagerConnectionSource是ConnectionSource的一個(gè)實(shí)現(xiàn), 以傳統(tǒng)的JDBC方式從連接URL里取得連接。
3.4. 注意DriverManagerConnectionSource會(huì)在每次調(diào)用getConnection()方法時(shí)建立一個(gè)新連接。
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. 記錄事件有時(shí)創(chuàng)建得很快。為了來得及插入數(shù)據(jù)庫(kù), 推薦為DBAppender使用連接池。
4.2. 使用DataSourceConnectionSource可以配置連接池, 推薦使用c3p0。
4.3. 新建一個(gè)名為DBAppender的Java項(xiàng)目, 同時(shí)添加相關(guān)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("向數(shù)據(jù)庫(kù)寫入一個(gè)跟蹤信息");logger.debug("向數(shù)據(jù)庫(kù)寫入一個(gè)測(cè)試信息");logger.info("向數(shù)據(jù)庫(kù)寫入一個(gè)日志信息");logger.warn("向數(shù)據(jù)庫(kù)寫入一個(gè)警告信息");logger.error("向數(shù)據(jù)庫(kù)寫入一個(gè)錯(cuò)誤信息");} }4.6. 運(yùn)行項(xiàng)目
4.7. 插入數(shù)據(jù)庫(kù)數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的012_logback中的DBAppender的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 011_logback中的SMTPApp
- 下一篇: 001_消息中间件