log4net, können 2-Anwendungen schreiben, um die gleiche log-Datei?
Ist es möglich, 2 Anwendungen schreiben in die gleiche Protokolldatei mit log4net?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, 2 Anwendungen schreiben in die gleiche Protokolldatei mit log4net?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann Sie aber, wenn Sie eine Anwendung schreiben, die die Datei der anderen Anwendung werden wahrscheinlich erleben einen Fehler, wenn Sie schreiben muss, um das Protokoll als auch aufgrund der Tatsache, dass die erste Anwendung sein, die hält die Datei zum schreiben geöffnet. Es ist immer am besten, um log-Quellen, die für Ihre Anwendungen - wenn Sie teilen müssen, ein Protokoll, eine Datenbank verwenden, wie es ist entworfen, um die gleichzeitige schreibt.
Dies ist eines jener Dinge, die wirklich gut funktionieren auf Ihrem Computer, wenn Sie sich entwickeln, da sind Sie wahrscheinlich nicht genug gleichzeitige Schreibvorgänge in die Protokolldatei, um zu bemerken, keine Probleme. Sobald Ihr Antrag beginnt, mehr zu erfahren laden Sie das problem, sich zu zeigen beginnen und an diesem Punkt kann es manifestiert sich in seltsame Wege. Ich würde auf jeden Fall versuchen eine andere Lösung.
MinimalLock teilweise löst das problem (wie @Mark erwähnt), aber wenn Sie RollingFileAppender, Sie führen in andere Probleme. Wenn die Datei Rollen, Sie können finden sich eine race condition, wo ein Prozess überschreibt einen anderen Prozess, die neu erstellte log-Datei.
Andere Optionen sind RemoteLogger, von wo man einen einfachen server einrichten, empfangen und aufnehmen, die Protokollierung von Ereignissen gesendet, die durch andere Prozesse. Ebenfalls können Sie sich auf einer SQL-Datenbank. Ich schrieb ein einfaches angehängt, die Protokolle zu Redis, man würde Sie brauchen eine einfache Anwendung zum Lesen von Redis und Aufzeichnung in einer Datei. Das problem bei diesen Ansätzen ist, dass Sie alle die Einführung eines point-of-failure. Wenn etwas nicht richtig funktionieren, ist oft, wenn Sie brauchen, protokolliert die meisten, und dann Sie möglicherweise nicht zur Verfügung.
Also meine Lösung war um zu vermeiden das problem vollständig, indem jeder Prozess-log in eine eigene Datei. Das war einfach zu tun, mit einer änderung in der Konfiguration. In Ihrem
(Rolling)FileAppender
- Konfiguration verwenden:Die Prozess-ID wird Teil des Dateinamens. Ja, das heißt, Sie haben jetzt einige log-Dateien durchkämmen, aber eine log-Datei aggregator wie Graylog, Splunk, oder Logscape helfen können.
%processid
werden in der Lage zu handhaben, um sicherzustellen, das schreiben dem Protokoll fehlschlägt? Wenn aus irgendeinem Grund fehlschlägt, macht es halt der rest von dem code der ausgeführt werden soll, oder es weiterhin ausgeführt, der restliche code in der API-Aufruf?%processid
können gleich für mehrere threads im gleichen Prozess, aber ich glaube, log4net Griffe, okay. Ich denke, du wirst in Ordnung sein; Vertrauen, indem Sie überprüfen.Hängt es von der FileAppender's LockingModel. Wenn es ExclusiveLock dann ein anderer Prozess die Datei nicht öffnen zum schreiben. Die alternative ist MinimalLock, aber es ist nicht dazu gedacht, für diesen Zweck. Es ist beabsichtigt, für die Möglichkeit, einen anderen Prozess zu verschieben, oder löschen Sie die Datei.
Ja, es ist möglich, wie oben angegeben, aber ich habe jetzt schon einige Belastungstests von diesem Szenario.
Das setup ist ganz einfach:
Gang setzt 1000 Anfragen auf der gleichen Seite mit einem counter in der
URL (abgeholt von der logging-Anweisung).
Wenn beide Schaltflächen geklickt wird gleichzeitig die log-Einträge sind ganz durchsetzt das Protokoll.
ABER, und das ist der große PUNKT, die Beurteilung durch die zugehörigen request-Zähler, ist es klar, dass es race conditions.
Fast jedes mal, wenn ein web-Projekt erfolgreich in die Protokollierung seiner Einreise, der andere ausfällt (der Eintrag wird übersprungen).
So, mit anständigen Verkehr gegen das common log, Sie haben grundsätzlich keine Garantie auf die log-Anweisungen tatsächlich am Ende in der log.
Die Schlussfolgerung ist immer Projekt-spezifische log-Dateien, wie es scheint.
Wurde der test durchgeführt mit der Vorgabe von "MinimalLock".
Ich umgestrickt den test mit "ExclusiveLock" als gut, nur um herauszufinden, dass die erste web-Projekt zum konfigurieren der logger "gewonnen", grundsätzlich zu sperren ALLE anderen Anforderungen, zu melden.
So offensichtlich ist das ein no-go als gut.
Oder können Sie Mutex-sperren auf gemeinsame Ressourcen und damit zur Synchronisation des Zugriffs auf eine gemeinsame log-Datei von verschiedenen Prozessen.