首页 > 代码库 > [Logback+slf4j] Mysql DBAppender 正确配置方法 以及错误处理

[Logback+slf4j] Mysql DBAppender 正确配置方法 以及错误处理

第一必要条件: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 Linux

use 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>


缺一不可。





[Logback+slf4j] Mysql DBAppender 正确配置方法 以及错误处理