2013-05-16 3 views
0

Я заинтересован в использовании slf4j-logback в моем проекте и хотел бы использовать DBAppender.Logback DBAppender DDL?

По-видимому, если вы не реализуете свой собственный DBNameResolver, вы должны соблюдать конкретные критерии/схему таблицы, указанные в приведенной выше ссылке. В частности, вам нужны 3 таблицы с очень конкретными столбцами.

Хотя информация на этой странице довольно многословна, она не содержит никаких «метаданных таблицы» (ключи, индексы, значения по умолчанию и т. Д.), И мне интересно, оставим ли мы, чтобы добавить их в нашу по собственному усмотрению или если они должны быть определены с определенными значениями.

Я попытался найти DDL или SQL-скрипт для создания этих таблиц, но не смог найти их. Существуют ли такие сценарии? Как другие SOers имели дело с созданием этих таблиц DBAppender? Заранее спасибо!

Edit: Я нашел this article on Grails обсуждение DBAppender:

Вы должны создать таблицы базы данных самостоятельно. Существует три таблицы, а распределение журналов поставляется с образцом DDL для нескольких популярных баз данных.

Я скачал последнюю версию (1.0.13) распределения и обыскали его высоко и низко для .ddl и .sql файлов, и нашел что-то , напоминающее то, что я искал, расположенный по адресу:

Logback-1.0.13/Logback доступа/SRC/главная/Java/ч/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). Поэтому я все еще не понимаю ...

ответ

-1

Я посмотрел исходный код для 1.0.13's DBAppender. Javadocs для государства DBAppender класса:

DBAppender вставляет событие доступа в три таблицы базы данных в формате независимо от языка программирования Java.

Однако, когда вы копаете в код, сообщения журнала на самом деле просто быть добавлены к access_event_header и access_event, а не 3 таблицы, как Javadocs говорят.

Итак, в заключение:

Logback Javadocs и документы разработчик не в курсе последней версии, и не отражают истинную структуру таблицы, что DBAppender требует.

+0

См. ответ elton, который является правильным. Вероятно, вы должны удалить этот ответ, ошибочно принятый как правильный. – Ceki

2

Вы ищете неправильный модуль регистрации! 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; 
Смежные вопросы