我们知道将数据库输出到不同的地方需要使用不同的appender表示,那下面了解一下输出到数据库的DBAppender。

1.DBAppender

由于DBAppender会把记录写到数据库中,因此我们必须知道数据库的表结构。这个结构是固定的,但是可以通过继承DBAppenderBase类来实现修改表的结构,详细做法参考

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;

 

 

logback 配置mysql日志 logback写入数据库_数据源

 

 

logback 配置mysql日志 logback写入数据库_bc_02

 

 

2.ConnectionSource

logback 配置mysql日志 logback写入数据库_数据库_03

 

 ConnectionSource有3种类型实现:DataSourceConnectionSource、DriverManagerConnectionSource 和 JNDIConnectionSource。

1.DriverManagerConnectionSource类型

DriverManagerConnectionSource类型是直接使用DriverManager通过jdbc驱动连接数据库的,而不是使用数据源DataSource获得数据库连接。

xml文件配置:

logback 配置mysql日志 logback写入数据库_数据源_04

logback 配置mysql日志 logback写入数据库_数据源_05

logback 配置mysql日志 logback写入数据库_bc_06

 注意:使用DriverManager获得数据库连接的方式的配置格式是相同的,因此不需要改动格式。标准的格式如上图所示。以后使用直接copy就可以了。

2.DataSourceConnectionSource类型

该方式是从javax.sql.DataSource取得连接的。由于DataSource有很多种类型的实现,因此不同的实现类中具有相同功能的属性的属性名可能不尽相同,因此可能造成<dataSource>标签的子标签名不尽相同。

xml文件配置:

logback 配置mysql日志 logback写入数据库_bc_07

logback 配置mysql日志 logback写入数据库_logback 配置mysql日志_08

logback 配置mysql日志 logback写入数据库_数据源_09

 由于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/

logback 配置mysql日志 logback写入数据库_logback 配置mysql日志_10

2.c3p0类型数据源的配置

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

logback 配置mysql日志 logback写入数据库_bc_11

3.dbcp类型数据源的配置

需要导入Commons-dbcp-1.x.jar与Commons-pool-1.x.jar两个jar文件,下载网址:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi

logback 配置mysql日志 logback写入数据库_数据源_12

 

 

 总结

存储用户名、驱动、资源定位符使用的标签是不同的。

 

logback 配置mysql日志 logback写入数据库_bc_13

 

 

3.JNDIConnectionSource类型

logback 配置mysql日志 logback写入数据库_bc_14

 

 3.在ConnectionSource中应用连接池

logback 配置mysql日志 logback写入数据库_数据源_15

 

 

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

logback 配置mysql日志 logback写入数据库_bc_16