2009-11-16 6 views
1

J'ai une application Java qui s'exécute sur deux machines dans un cluster et ils se connectent tous les deux à une base de données mysql. Tout fonctionne bien, mais j'aimerais avoir un champ supplémentaire dans la base de données qui représente l'IP d'où proviennent les demandes.
J'ai résolu cela en ayant deux fichiers log4j.properties différents, mais je suppose qu'il y a une meilleure façon de le faire?log4j se connectant à DB (dans un cluster)

Ceci est la ligne dans le fichier log4j.properties qui est différent sur les machines:

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') 

Y at-il quelque chose pour MySQL comme connection_ip? Ou un espace réservé dans log4j, afin que je puisse stocker l'adresse IP de l'application Java?

Cheers, Lukas

Répondre

2

Je résolu ce problème en utilisant le contexte de diagnostic mappées de log4j. Lorsque je lance l'application Java, je stocke l'adresse IP avec cette commande.

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

Et maintenant je peux utiliser le% X {serverIP} comme espace réservé dans mon fichier 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') 

Voici un excellent post sur les log4j avec quelques bons exemples
http://onjava.com/pub/a/onjava/2002/08/07/log4j.html?page=3

Questions connexes