我对在我的项目中使用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_event和access_event_header)是,而不是文档所引用的3个表(logging_event、logging_event_property和logging_event_exception)。所以我还是很困惑.
发布于 2013-05-16 11:19:42
我查看了1.0.13的DBAppender的源代码。DBAppender类状态的Javadocs:
DBAppender以独立于Java编程语言的格式将访问事件插入到三个数据库表中。
然而,当您深入研究代码时,日志消息实际上只是附加到access_event_header和access_event中,而不是像Javadocs那样的3个表。
因此,结论是:
logback Javadocs和开发人员文档与最新版本不同步,也没有反映出DBAppender 所需的真正的表结构。
发布于 2013-05-28 08:59:56
您正在搜索错误的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;https://stackoverflow.com/questions/16584888
复制相似问题