logback日志輸出至數據庫


我們知道將數據庫輸出到不同的地方需要使用不同的appender表示,那下面了解一下輸出到數據庫的DBAppender。

1.DBAppender

由於DBAppender會把記錄寫到數據庫中,因此我們必須知道數據庫的表結構。這個結構是固定的,但是可以通過繼承DBAppenderBase類來實現修改表的結構,詳細做法參考https://blog.csdn.net/qq_20914913/article/details/92830914#%E4%B8%80%E3%80%81%E5%8E%9F%E5%A7%8Blogback%20%C2%A0MySQL%E9%85%8D%E7%BD%AE

1.根據官方文檔創建數據庫

DBAppender會把記錄事件寫入數據庫的三張表(logging_event、logging_event_property、logging_event_exception),並且這三張表的結構是固定的。創建這三張表的腳本如下:

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.ConnectionSource

 

 ConnectionSource有3種類型實現:DataSourceConnectionSource、DriverManagerConnectionSource 和 JNDIConnectionSource。

1.DriverManagerConnectionSource類型

DriverManagerConnectionSource類型是直接使用DriverManager通過jdbc驅動連接數據庫的,而不是使用數據源DataSource獲得數據庫連接。

xml文件配置:

 注意:使用DriverManager獲得數據庫連接的方式的配置格式是相同的,因此不需要改動格式。標准的格式如上圖所示。以后使用直接copy就可以了。

2.DataSourceConnectionSource類型

該方式是從javax.sql.DataSource取得連接的。由於DataSource有很多種類型的實現,因此不同的實現類中具有相同功能的屬性的屬性名可能不盡相同,因此可能造成<dataSource>標簽的子標簽名不盡相同。

xml文件配置:

 由於DataSource有不同的實現,比如Druid、c3p0、dbcp數據源等。每一種數據源對用戶名與密碼驅動等屬性的命名可能不一致,因此導致配置文件的標簽有可能不一樣。下面列舉一下Druid與c3p0類型數據源的appenderde的配置。

1.DBAppender配置

1.Druid類型數據源的配置

需要導入druid-1.0.29.jar文件,jar下載地址:http://repo1.maven.org/maven2/com/alibaba/druid/

2.c3p0類型數據源的配置

需要導入c3p0-0.9.1.2.jar文件,jar下載地址:http://sourceforge.net/projects/c3p0/

3.dbcp類型數據源的配置

需要導入Commons-dbcp-1.x.jar與Commons-pool-1.x.jar兩個jar文件,下載網址:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

 

 

 總結

 通過配置Druid類型數據源的DBAppender與c3p0類型數據源的DBAppender以及dbcp類型數據源的DBAppender可以發現他們有以下區別:存儲用戶名驅動資源定位符使用的標簽是不同的

 

 

 

3.JNDIConnectionSource類型

 

 3.在ConnectionSource中應用連接池

 

 

下面了解一下連接池的配置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM