我有兴趣在我的项目中使用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_event
和access_event_header
)不与文档引用的相同3个表格logging_event
,logging_event_property
,和logging_event_exception
)。所以我在这里仍然不知所措......
答案 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_header
和access_event
,而不是像Javadocs那样的3个表。
所以,最后:
logback Javadocs和开发人员文档与最新版本不兼容,并未反映DBAppender
所需的真实表格结构。