Frage

Ich habe eine Java-Anwendung Wich in einem Cluster auf zwei Rechnern läuft und sie beide Protokoll einer MySQL-Datenbank. Alles funktioniert gut, aber ich möchte in der Datenbank ein zusätzliches Feld haben, die das jeweilige IP darstellt, in dem die Anforderungen herkommt.
Ich löste dies durch zwei verschiedene log4j.properties Dateien zu haben, aber ich denke, es gibt eine schönere Art und Weise, das zu tun?

Das ist die Linie in der log4j.properties-Datei, die auf den Maschinen unterschiedlich ist:

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

Gibt es etwas für mysql wie connection_ip? Oder ein Platzhalter in log4j, dass so kann ich speichert die IP dort von der Java-Anwendung?

Cheers, Lukas

War es hilfreich?

Lösung

Ich löste dies durch den Mapped Diagnostic Kontext von log4j verwenden. Wenn ich die Java-Anwendung starten speichere ich die IP mit diesem Befehl.

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

Und jetzt kann ich das% X verwenden {serverIP} als Platzhalter in meiner log4j.properties Datei.

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

Hier ist ein ausgezeichneter Beitrag über log4j mit ein paar gute Beispiele
http://onjava.com/pub/ a / onjava / 2002/08/07 / log4j.html? page = 3

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top