2009-08-10 10 views

Antwort

0

Er beantwortet Ihre Frage nicht direkt, aber der FileAppender von log4 * net * hat ein LockingModel-Attribut, das Sie nur zum Sperren festlegen können, wenn die Datei tatsächlich verwendet wird. Wenn Sie also zwei FileAppender im gleichen Thread mit MinimalLock gesetzt haben, würde es wahrscheinlich perfekt funktionieren. Bei verschiedenen Threads könnten Sie ab und zu einen Deadlock erreichen.

Der FileAppender unterstützt Pluggable-Dateisperrmodelle über die Eigenschaft LockingModel. Das Standardverhalten, das von FileAppender.ExclusiveLock implementiert wird, besteht darin, eine exklusive Schreibsperre für die Datei zu erhalten, bis dieser Appender geschlossen wird. Das alternative Modell FileAppender.MinimalLock enthält nur eine Schreibsperre, während der Appender ein Protokollierungsereignis schreibt.

Eine kursive Websuche ergab keine nützlichen Ergebnisse zur Implementierung von MinimalLock in log4j.

+0

log4net hat nichts mit log4j gemeinsam – skaffman

+0

Nicht wahr - es ist ziemlich ähnlich in den meisten Konzepten (Fehler Ebenen, Appender, um zwei zu nennen). – ripper234

3

Log4js FileAppender erlaubt nicht das Schreiben von zwei JVMs in dieselbe Datei. Wenn Sie es versuchen, erhalten Sie eine beschädigte Protokolldatei. Logback, der Nachfolger von log4j, erlaubt es jedoch in prudent mode zwei Appendern sogar in verschiedenen JVMs, in dieselbe Datei zu schreiben.

0

Von Log4j FAQ a3.3

Wie erhalte ich mehrere Verfahren in derselben Datei zu protokollieren?

Sie können jeden Prozess in einem SocketAppender protokollieren. Der empfangende SocketServer (oder SimpleSocketServer) kann alle Ereignisse empfangen und sie an eine einzige Protokolldatei senden.

Was das eigentlich bedeutet, werde ich mich selbst untersuchen.

Ich fand auch die folgende Abhilfe auf einem anderen SO question:

Code + Example