Asynchrone Protokollierung
Gerade jetzt in meiner Anwendung,bei der bestimmte Punkte, die wir melden sich einige schwere Sachen in den log-Dateien.
Grundsätzlich nur für die Protokollierung, die wir erstellen, JSON-Daten und die Protokollierung in Log-Dateien.Dies ist eine geschäftliche Anforderung zum log-Daten im JSON-format .
Nun erstellen von JSON-aus den vorliegenden Daten und dann zum logging braucht viel Zeit und schlägt in die ursprüngliche Anforderung zurück Zeit.
Nun die Idee ist die Verbesserung der sitation .
Eines der Dinge, die wir besprochen haben, ist die Erstellung eines thread-pool mit
Executors.newSingleThreadExecutor()
in unserem code und dann die Einreichung der Aufgabe ist es, die die Umwandlung der Daten in JSON und die anschließende Protokollierung.
Ist es ein guter Ansatz, dies zu tun ?Wie verwalten wir den thread-pool selbst ,wird es schaffen einige Fragen?
Ich würde mich freuen, wenn jemand teilen kann, bessere Lösungen zu finden.
Irgendwie zu verwenden Log4j .Ich habe versucht, AsyncAppender, aber nicht um gewünschten Ergebnis.
Wir sind mit EJB 3,Jboss 5.0,Log4j,java6.
InformationsquelleAutor Rips | 2013-06-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie glaube ich auf der rechten Spur in Bezug auf die Verwendung von einem separaten thread-pool für die Protokollierung. In viele Produkte, die Sie werden sehen, das asynchrone logging-Funktion. Die Protokolle werden gesammelt und geschoben, um log-Dateien mit einer separaten thread als dem thread, den Antrag. Vor allem in Production-Umgebungen, wo Millionen von eingehenden Anfrage und Ihrer Antwort Zeit brauchen, um weniger als ein paar Sekunden. Sie kann nicht alles leisten, wie die Protokollierung verlangsamt das system. Also der Ansatz ist das hinzufügen von Protokollen in einem Speicher-Puffer und drücken Sie asynchron in angemessen große Stücke.
Ein Wort von Vorsicht zwar mit thread-pool für die Anmeldung
Als mehrere threads arbeiten werden Sie auf die log-Datei(en) und auf einem memory-log-Puffer, müssen Sie vorsichtig sein, über die Protokollierung. Sie müssen zum hinzufügen von Protokollen in einem FIFO-Art in einem Puffer, um sicher zu sein, dass die Protokolle gedruckt werden, die in den log-Dateien, sortiert nach dem Zeitstempel. Auch stellen Sie sicher, dass die Datei zugreifen, synchronisiert werden, und Sie laufen nicht in die situation, wo die log Datei ist alles verkehrt herum oder Durcheinander.
InformationsquelleAutor Juned Ahsan
Haben Sie einen Blick auf Logback,AsyncAppender es bieten bereits einen separaten threadpool, queue etc und ist leicht konfigurierbar, ist es fast das gleiche tun wie Sie tun, aber spart Euch das Rad neu erfinden möchte.
Wenn Sie andere Aufgabe auch(wie Daten-Konvertierung), dann deine Lösung ist auch ok. Über log4j vs logback, log4j Entwicklung gestoppt und logback ist aktiv. Für mehr details über log4j vs logback haben Sie einen Blick auf dieses link
InformationsquelleAutor Alankar Srivastava
Ist mit MongoDB für die Anmeldung betrachtet?
oder unten. MongoDB bietet die Möglichkeit
das Feuer aus dem einfügen in eine log-Sammlung und nicht warten, für einen response-code. (Wenn man
will eine Antwort, man nennt getLastError() — würden wir überspringen hier).
wir preallocate Speicherplatz für die Protokolle, und wenn es voll ist, die log-wraps
und verwendet der space angegeben. Kein Risiko, füllt sich die Festplatte mit
übermäßige log-Informationen, und keine Notwendigkeit, zu schreiben, log-Archivierung /
löschen von Skripts.
Allgemeine, schnell genug für Probleme wie diese. Zweitens, wenn Sie mit einem
capped collection, einfügen, um automatisch erhalten: wir
brauchen nicht, einen index zu schaffen, die auf Zeitstempeln. Das macht die Dinge auch
schneller, und es ist wichtig, gegeben, dass die logging-use-case hat eine sehr
die hohe Anzahl der Schreibvorgänge im Vergleich zu liest (das Gegenteil von den meisten Datenbank
Probleme).
Feld jedes mal, wenn wir wollen.
InformationsquelleAutor rajesh
Gibt es auch in log4j 2: http://logging.apache.org/log4j/2.x/manual/async.html Außerdem Lesen Sie in diesem Artikel darüber, warum es ist so schnell: http://www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html#.UzwywI9Bow4
InformationsquelleAutor Karussell
Können Sie auch versuchen, CoralLog asynchron log-Daten mit den disruptor-Muster. So verbringen Sie die minimale Zeit in der logger-thread und all die harte Arbeit, die an die Gewinde, die die eigentliche Datei I/O. Es bietet auch Memory-Mapped-Dateien, um die Geschwindigkeit der consumer-thread und reduzieren Warteschlange Streit.
Haftungsausschluss: ich bin einer der Entwickler von CoralLog
InformationsquelleAutor rdalmeida