2009-11-16 3 views
1

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

Это строка в файле 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?

Приветствия, Лукас

ответ

2

Я решил это с помощью сопоставленной диагностики Контекст 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