我们知道将数据库输出到不同的地方需要使用不同的appender表示,那下面了解一下输出到数据库的DBAppender。
1.DBAppender
由于DBAppender会把记录写到数据库中,因此我们必须知道数据库的结构。
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类型数据源的配置
2.c3p0类型数据源的配置
通过配置Druid类型数据源的DBAppender与c3p0类型数据源的DBAppender可以发现他们有以下区别:存储用户名、驱动、资源定位符使用的标签是不同的。
3.JNDIConnectionSource类型
3.在ConnectionSource中应用连接池
下面了解一下连接池的配置