log4j JDBCAppender повернуть имя таблицы - PullRequest
2 голосов
/ 01 декабря 2010

Я успешно настроил приложение, которое использует log4j для входа в базу данных MySQL. (Использование org.apache.log4j.jdbc.JDBCAppender).

У меня также есть несколько Perl-приложений, которые также входят в базу данных. Мои perl-приложения настроены так, что имя таблицы базы данных меняется каждый месяц (log_2010_11, log_2010_10 и т. Д.). В конце каждого месяца я запускаю сценарии отчетности в только что завершенный месяц, выгружаю таблицу во внешний файл (который сжимается и архивируется), а затем удаляю таблицу. Таким образом, общий размер базы данных журналов остается в разумных пределах.

Я бы хотел сделать то же самое с log4j, но, похоже, нет подходящего для этой цели приложения log4j.

Можно ли сделать что-то вроде этого:

log4j.appender.SQ=org.apache.log4j.jdbc.JDBCRollingAppender

log4j.appender.SQ.Driver=com.mysql.jdbc.Driver

log4j.appender.SQ.URL=jdbc:mysql://localhost:3306/logs_{%year}_{%month}

Спасибо.

Ответы [ 3 ]

1 голос
/ 07 февраля 2011

Я разобрался, как это сделать:

log4j.appender.SQ=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.SQ.Driver=com.mysql.jdbc.Driver
log4j.appender.SQ.URL=jdbc:mysql://localhost:3306/logs
log4j.appender.SQ.sql=INSERT INTO accesslog_%d{yyyy_MM} (date, time, tz, ...

Похоже, вы можете просто вставить строки формата даты в оператор SQL, и JDBCAppender развернет их и войдет в таблицу coresponding.

Тем не менее, он не будет создавать новые таблицы в начале нового месяца, поэтому в настоящее время я должен вручную создать таблицы, что далеко от идеала.

0 голосов
/ 14 декабря 2010

Как насчет сценария, который нужно запускать ежемесячно и помещать эту конкретную таблицу в файл резервной копии, а затем архивировать ее для архивирования.По завершении обрежьте таблицу или удалите строки в диапазоне дат.

0 голосов
/ 01 декабря 2010

Для этого вам понадобится написать собственный аппендиат.

Другой вариант - остаться с существующим аппендером и сделать следующее:

В вашей базе данных есть таблица с именем log. Почему бы не создать Perl-скрипт, который создает новую таблицу в конце каждого месяца, скажем, log_12 за декабрь, копирует все с log до log_12 и затем удаляет все из log? Таким образом, вам не нужно возиться с созданием другого аппендера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...