[Logback+slf4j] Mysql DBAppender 正確配置方法 以及錯誤處理,logbackslf4j
第一必要條件:jar 包
所需要的包:
logback-core-0.9.8.jar
logback-classic-0.9.8.jar
slf4j-api-1.6.8.jar
寫該文時,最新版本為 logback的版本為1.1.2. 對應的Slf4j-api 為 1.7.6 (兩種配方都可以)
第二必要條件:資料庫表建立指令碼。
包括stackoverflow上的很多朋友在內的coder都被官方
http://logback.qos.ch/manual/appenders.html
中提到的getGeneratedKeys
誤導了,都以為,只要是表格裡支援的,就不用自動建立表了,而只需要加上sqlDialect方言。其實不是,不管支援與否都要手動建立表。(當然你可以自己寫一個java bean自動運行指令碼來建立)。
還有看了很多網上的文章,經常出現 sqlDialect 這個配置節點。
我從logback 0.9.8開始測試的,對於Mysql,都不需要配置這個節點,oracle也不需要。
這一步,大家只需要在mysql中運行下面的指令碼:
# Logback: the reliable, generic, fast and flexible logging framework.# Copyright (C) 1999-2010, QOS.ch. All rights reserved.## See http://logback.qos.ch/license.html for the applicable licensing # conditions.# This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.## It is intended for MySQL databases. It has been tested on MySQL 5.1.37 # on Linuxuse tumorpredict;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;
第三必要條件:正確的配置。
這裡給出一個用c3p0串連池管理的logback配置:
<appender name="db-classic-mysql" 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.jdbc.Driver</driverClass> <jdbcUrl>jdbc:mysql://{$server ip}:3306/{$dbname}</jdbcUrl> <user>{$user}</user> <password>{$password}</password> </dataSource> </connectionSource> </appender>
缺一不可。