Logback DBAppender DDL?

时间:2013-05-16 10:23:21

标签: java jdbc slf4j logback appender

我有兴趣在我的项目中使用slf4j-logback,并希望使用DBAppender

显然,除非您实施自己的DBNameResolver,否则您必须遵守上面链接中列出的特定表格标准/架构。具体来说,您需要3个具有非常特定列的表。

虽然该页面上的信息相当冗长,但它不包含任何“表格元数据”(键,索引,默认值等),我想知道我们是否需要自己添加这些信息。自由裁量权或是否需要用特定值来定义。

我尝试使用DDL或SQL脚本来创建这些表,但找不到任何表。这样的脚本存在吗?其他SOers如何处理这些DBAppender表的创建?提前谢谢!

修改:我发现this article on Grails正在讨论DBAppender

  

您必须自己创建数据库表。有三个表,Logback分发附带了几个流行数据库的样本DDL

我下载了最新的(1.0.13)发行版并搜索了.ddl和.sql文件的高低版本,并找到了类似我想要的某些,位于:

  

的logback-1.0.13 /的logback访问/ SRC /主/ JAVA / CH / QOS /的logback /访问/分贝/脚本/ mysql.sql

# 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.access.db.DBAppender.
#
# It is intended for MySQL databases. It has been tested on MySQL 5.0.22 with 
# INNODB tables.


BEGIN;
DROP TABLE IF EXISTS access_event_header;
DROP TABLE IF EXISTS access_event;
COMMIT;

BEGIN;
CREATE TABLE ACCESS_EVENT 
(
    timestmp          BIGINT NOT NULL,
    requestURI        VARCHAR(254),
    requestURL        VARCHAR(254),
    remoteHost        VARCHAR(254),
    remoteUser        VARCHAR(254),
    remoteAddr        VARCHAR(254),
    protocol          VARCHAR(254),
    method            VARCHAR(254),
    serverName        VARCHAR(254),
    postContent       VARCHAR(254),
    event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY
);
COMMIT;

BEGIN;
CREATE TABLE access_event_header
(
    event_id          BIGINT NOT NULL,
    header_key        VARCHAR(254) NOT NULL,
    header_value      VARCHAR(1024),
    PRIMARY KEY(event_id, header_key),
    FOREIGN KEY (event_id) REFERENCES access_event(event_id)
);
COMMIT;

然而,这些表格(access_eventaccess_event_header与文档引用的相同3个表格logging_eventlogging_event_property,和logging_event_exception)。所以我在这里仍然不知所措......

2 个答案:

答案 0 :(得分:2)

您正在搜索错误的logback模块! logback-classic 是您正在谈论的模块。 您需要的脚本可以在logback-classic\src\main\java\ch\qos\logback\classic\db\<db>.sql下面找到。

例如。 mysql.sql:

# 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


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;

答案 1 :(得分:-1)

我查看了1.0.13 DBAppender的源代码。 DBAppender类状态的Javadoc:

  

DBAppender以独立于Java编程语言的格式将访问事件插入到三个数据库表中。

然而,当您深入研究代码时,日志消息实际上只是附加到access_event_headeraccess_event,而不是像Javadocs那样的3个表。

所以,最后:

logback Javadocs和开发人员文档与最新版本不兼容,并未反映DBAppender所需的真实表格结构。