log4j запись в БД (в кластере)
-
20-09-2019 - |
Вопрос
У меня есть приложение 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?
Приветствую, Лукас
Решение
Я решил эту проблему, используя сопоставленный диагностический контекст 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