Frage

Gibt es eine Möglichkeit log4j die Protokollierung von Ereignissen in einer Protokolldatei zu schreiben, die auch von anderen Anwendungen geschrieben wird. Die anderen Anwendungen könnten Nicht-Java-Anwendungen sein. Was sind die Nachteile? Probleme mit Sperren? Formatierung?

War es hilfreich?

Lösung

Log4j hat eine SocketAppender, die Ereignisse an einen Dienst senden, die Sie selbst umsetzen können oder die einfache Implementierung mit Log4j gebündelt verwenden.

Es unterstützt auch syslogd und das Windows-Ereignisprotokoll, das bei dem Versuch, nützlich sein kann Ihre Log-Ausgabe mit Ereignissen von Nicht-Java-Anwendungen zu vereinen.

Wenn die Leistung ist ein Problem überhaupt, Sie einen einzelnen Dienst wollen die Protokolldatei zu schreiben, anstatt zu versuchen, eine einheitliche Sperrstrategie zwischen verschiedenen Protokollierungsanwendungen zu koordinieren.

Andere Tipps

Ihre beste Wette sein könnte jedes Anwendungsprotokoll separat zu lassen, dann an Ort und Stelle einen geplanten Auftrag gestellt ‚RV‘ zusammen die Dateien basierend auf der Zeit. Wenn Sie wirklich up-to-date zu dem vollständigen Log-Zugang benötigen, können Sie diesen Lauf haben jede Stunde.

Ich habe eine Erfahrung mit den folgenden zwei Ansätze:

  1. Verwenden Sie Datenbank für statt Textdatei Protokollierung - es kann aufgrund von Leistungsproblemen unerschwinglich sein, auf der anderen Seite ist es sehr einfach, Protokolle zu analysieren, Berichte erstellen. Datenbank übernimmt für alle Concurrency Probleme.
  2. Der andere Ansatz beinhaltet Nutzung von JBoss-Server, die verwendet werden können Protokollinformationen aus anderen Quellen zu lesen. JBoss kann in der Minimalkonfiguration und dank ausgeführt werden, dass es wirklich leicht ist (2 Sekunden Anlaufzeit). Details finden Sie hier: http://docs.jboss.org/process -GUIDE / en / html / logging.html (Protokollierung auf einem separaten Server). Log4J kümmert sich um alle Verriegelungs- / Concurrency Probleme.

Wenn Sie nicht verwenden JBoss planen Sie den zweiten Ansatz als Basis für Ihre eigene Logging-Lösung verwenden können.

Das glaube ich nicht die Standard-log4j Appender tun, um jede Dateisperrung oder Synchronisation. Ohne eine solche Verriegelung sind Sie Nachrichten verlieren wahrscheinlich einzuloggen oder sie verstümmelt erhalten.

Ich bin nicht sicher, wie einfach es Datei in Java Sperren zu tun ist, aber diese Arbeit direkt zu machen, ich glaube, Sie müßten die entsprechenden Appender und überschreiben Sie die Protokollierungsmethode Unterklasse, mit Synchronisationscode Einwickeln, dass Sperren und entriegelt die Datei. Dies könnte Auswirkungen auf die Leistung haben, je nach Systemlast.

Log4perl hat eine Synchronisation Appender, Log :: Log4perl :: Appender :: Synchronisierte, die einen Appender wickelt und erreicht dies, und scheint auch ein Flag in seinem Log zur Verfügung zu stellen :: Log4perl :: Appender :: Datei, die verschachtelt verhindert Linien. Sie könnten sehen, was diejenigen tun, um zu sehen, ob es in Java replizierbar sein könnte.

Log4j ist flexibel genug, dass Sie Protokolleinträge in einem Format erstellen können, die mit den Datensätzen bereits in der Datei kompatibel ist. Schauen Sie einfach in die Appen dafür, wie bestimmte Datenfelder zu formatieren.

Ihr Hauptanliegen wird von anderen Anwendungen mit Sperren, höchstwahrscheinlich sein. Achten Sie darauf, alle Anwendungen nicht haben eine exklusive Sperre auf die Datei und Sie sollten in Ordnung sein.

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