0

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

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

尽管该页面上的信息相当冗长,但它不包括任何“表元数据”(键、索引、默认值等),我想知道我们是否可以自行决定添加这些元数据,或者是否它们需要用特定的值来定义。

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

编辑:我发现这篇关于 Grails 的文章在讨论DBAppender

您必须自己创建数据库表。共有三个表,Logback 发行版附带了几个流行数据库的示例 DDL。

我下载了最新的 (1.0.13) 发行版并在它的上下搜索 .ddl 和 .sql 文件,并找到类似于我正在寻找的东西,位于:

logback-1.0.13/logback-access/src/main/java/ch/qos/logback/access/db/script/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_propertylogging_event_exception) 不同。所以我在这里仍然不知所措......

4

2 回答 2

2

You are searching the wrong logback module! logback-classic is the module you are talking about. The script you need can be found below logback-classic\src\main\java\ch\qos\logback\classic\db\<db>.sql.

eg. the 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;
于 2013-05-28T08:59:56.073 回答
-2

我查看了 1.0.13 的源代码DBAppenderDBAppender类状态的 Javadocs :

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

但是,当您深入研究代码时,日志消息实际上只是被附加到access_event_headerand access_event,而不是像 Javadocs 所说的 3 个表。

所以,总而言之:

logback Javadocs 和开发人员文档不是最新版本的,并且不反映所需的真实表结构DBAppender

于 2013-05-16T11:19:42.483 回答