2009-08-11 7 views
0

Wir haben eine einfache Webapp läuft auf zwei Tomcat-Instanzen hinter Apache (ein Tomcat HA-Setup mit und mod_proxy_ajp). Die Rolle der Webanwendung besteht darin, eingehende Anfragedaten in eine Protokolldatei zu schreiben.HA Tomcat Datei schreiben Lösung benötigt

Da jede Tomcat-Instanz in ihrer eigenen JVM läuft, Wie sollten wir die Protokolldatei schreiben?

Es wäre hervorragend, wenn beide Instanzen in dieselbe Datei schreiben könnten, aber Log4J scheint das nicht zu unterstützen. Wir sind offen dafür, unseren eigenen Dateischreiber zu schreiben, aber ich bin mir nicht sicher, ob ein java.nio.channels.FileLock tun wird, was wir wollen.

Darunter befindet sich Debian mit einem ext3-Dateisystem, also wenn wir das in C oder sogar PHP machen würden, würden wir Dateisystemsperren verwenden. Allerdings wurde Java geschrieben, um das zugrundeliegende System wegzuspulen, und es ist zu einer Ansammlung von Klassen in mehreren Paketen geworden, die alle behaupten, auf die eine oder andere Weise Dateien schreiben zu können. Hat jemand einen Rat? Gibt es Pakete, die uns helfen könnten?

Ist es nur ein dummer Traum, von zwei JVMs in die gleiche Datei schreiben zu wollen? Sicher bin ich nicht der Erste.

Eine weitere Anforderung ist, dass diese Dateien jede Stunde gerollt werden, aber das ist nicht so ein Problem (außer vielleicht zur Zeit der Dateierstellung).

Danke!

Antwort

3

Es wäre eine weit, viel einfachere Lösung, einfach in zwei (oder mehr) Protokolldateien zu schreiben und dann einfach zu kombinieren, nachdem Sie sie gewürfelt haben.

Schreiben in die eine Datei von zwei oder mehr Prozessen hat alle Arten von Problemen. Sperren der Datei ist eine ziemlich grobkörnige und schwergewichtige Lösung.

Eine Alternative könnte einfach darin bestehen, die Protokollnachrichten in eine Warteschlange (JMS) zu schreiben, und ein Prozess liest die Nachrichten aus und schreibt sie in eine einzelne Protokolldatei.

+0

Ja, ich weiß ... aber es bedeutet, dass die Logik nicht an einem Ort ist ... Vor- und Nachteile, denke ich. –

+0

Welche Logik? Sie schreiben in eine Protokolldatei, richtig? Oder ist da mehr dran? – cletus

+0

+1 für die Warteschlangen-Idee, so dass alle eingehenden Anfragen nicht warten müssen, während die Datei IO für Ihre Webapp reagiert –

Verwandte Themen