RollingFileAppender Log4J keine Rolle-Datei
Schreibe ich einen kleinen xml-transformation-Schicht in Java. Ich empfangen von xml über web-service -, ändern Sie es, und senden Sie dann die geänderte xml zu einem anderen system. Ich warte dann auf eine Antwort und Rückgabe der Antwort an den ursprünglichen Aufrufer.
System A -> Me -> System B -> Me -> System A
Ich wollen, melden Sie die bitte, die ich empfangen, die Anfrage kann ich schicken, die Antwort, die ich erhalten, und die bitte, die ich senden. Grundsätzlich möchte ich zu Protokoll der xml, wo jeder Pfeil ist in meinem Diagramm.
Mein problem ist mit der RollingFileAppender. Ich versuche, Rollen zu 10 MB, manchmal tut es und manchmal nicht Rollen. Wenn es rollt sich ein paar mal, und dann aufhört, wird es weiterhin benennen Sie die gerollt Dateien von 3 auf 4 und 4 auf 5 und so weiter.
Meine beste Vermutung ist, dass, wenn die 10MB Marke überschritten, es gibt mehrere threads schreiben in die log-Datei, damit die Datei nicht mich umbenannt. Ich bin der Hoffnung, dass Log4J hat eine einfache Lösung für dieses, aber wenn nötig, ich bin offen für die Umstellung auf ein neues logging-framework. Vielen Dank im Voraus für jede Hilfe.
BEARBEITEN
Hier ist meine properties-Datei.
log4j.rootLogger=DEBUG, fileOut
log4j.appender.fileOut=org.apache.log4j.RollingFileAppender
log4j.appender.fileOut.File=/logs/log.log
log4j.appender.fileOut.layout=org.apache.log4j.PatternLayout
log4j.appender.fileOut.layout.ConversionPattern=%d %-5p %c - %m%n
log4j.appender.fileOut.MaxFileSize=10MB
log4j.appender.fileOut.MaxBackupIndex=10
log4j.appender.fileOut.append=true
EDIT 2 Dies ist im wesentlichen eine Beule, wie dieser Beitrag hat nur eine geringe Anzahl von Ansichten. Ich glaube, das kann nicht sein, ein einzigartiges problem. Jede Hilfe wird sehr geschätzt. Danke!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Log4J initialisiert sich bei der classloader Ebene. Innerhalb einer bestimmten classloader und seine Vorfahren, Log4J kann nur einmal initialisiert werden und die gleichen Log4J-Konfiguration gilt für alle Log4J-Anrufe innerhalb des classloader.
Solange alle Ihre logging-Aufrufe durchgeführt werden, die innerhalb der gleichen Log4J Konfiguration "Reich", Log4J weiß, wie Sie Zugriff auf die physikalische Datei am spitz von den rolling appender Konfiguration; wenn die Zeit kommt, roll, Walzen durchgeführt wird, kein problem.
Dinge, die problematisch werden, sobald Sie zwei (oder mehr) Log4J "Konfiguration realms" mit der gleichen physischen Datei für die rolling appender Konfiguration. Das könnte sein:
(etc)
Log4J hat einfach keine Möglichkeit zu wissen, wer sonst, außer sich selbst innerhalb der gleichen Log4J-Konfiguration realm, verwendet diese Datei. Also, was am Ende passiert, ist, dass Log4J auf Ein System versucht zu Rollen, die Datei (weil es denkt, dass keine anderen Prozesse auf diese Datei), und scheitert, weil jemand auf System B ist die Verwendung der Datei zur gleichen Zeit.
Dies ist eine bekannte Einschränkung der Verwendung von file-appenders, und Sie können nicht wirklich die Schuld Log4J für das: Log4J einfach nicht über die Mittel der überwachung, die sonst über Log4J in der gleichen "Konfiguration realm" wird die Datei.
Für eine solche Nutzung Szenario können Sie die Log4J-socket appender.
Wenn Ihr Szenario nicht um mehrere Log4J "Konfiguration reichen", dann versuchen Sie
-Dlog4j.debug=true
den JVM Parametern und sehen, was genau Los ist, während die Datei rollenden Betrieb.-Dlog4j.debug=true
?Ich auch vor dem gleichen Problem in meiner Anwendung.
Dank @Isaac gefunden, die ich mache DOMConfigurator.konfigurieren Sie für die gleichen log-Konfiguration in 2 implementierte Webanwendungen im application-server.
Ich bemerkte einer von Ihnen, und Rollen über geschah wie erwartet.
Für andere, die hier ankommen, überprüfen Sie mit RollingFileAppender NICHT FileAppender!
Cut und paste Fehler, zu einfach, für mich zumindest.