log4j ведение журнала в БД (в кластере) - PullRequest
1 голос
/ 16 ноября 2009

У меня есть приложение Java, которое работает на двух машинах в кластере, и они оба входят в одну базу данных mysql. Все работает нормально, но я хотел бы иметь дополнительное поле в базе данных, которое представляет IP-адрес, с которого поступают запросы.
Я решил это, имея два разных файла log4j.properties, но я думаю, что есть лучший способ сделать это?

Эта строка в файле log4j.properties отличается на компьютерах:

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, message) VALUES ('%d{dd MMM yyyy HH:mm:ss,SSS}','%c','%p','10.20.30.40','%m')

Есть ли что-то для mysql, как connection_ip? Или заполнитель в log4j, чтобы я мог хранить там IP-адрес из приложения Java?

Ура, Лукас

1 Ответ

2 голосов
/ 21 января 2010

Я решил эту проблему с помощью сопоставленного диагностического контекста log4j. Когда я запускаю приложение Java, я сохраняю IP с помощью этой команды.

MDC.put("serverIP", InetAddress.getLocalHost().getHostAddress());

И теперь я могу использовать% X {serverIP} в качестве заполнителя в моем файле log4j.properties.

log4j.appender.DB.sql=INSERT INTO log4j (date, category, priority, server, sessionID, message) VALUES ('%d{dd/MM/yyyy HH:mm:ss,SSS}','%c','%p','%X{serverIP}','%X{sessionID}','%m')

Вот отличный пост о log4j с несколькими хорошими примерами
http://onjava.com/pub/a/onjava/2002/08/07/log4j.html?page=3

...