it-swarm.com.de

Wie rotiere ich das Tomcat-Localhost-Protokoll?

Ich verwende Tomcat 6x in einem Linux-System. Es wird täglich eine localhost-Protokolldatei wie localhost.2011-06-07, localhost.2011-06-08 gedruckt. Ich möchte den localhost drehen, wenn er 1 MB erreicht.

Ich kann Protokolldateien in log4j für meine Webanwendungen drehen. Aber diese localhost-Protokolldatei von Tomcat konnte ich nicht zum Drehen bringen. Hat jemand eine andere Lösung als die Verwendung von Logrotat?

14
cherit

Wollen Sie nicht wollen, um Logrotate zu verwenden, oder erlaubt Ihr Sys-Administrator dies nicht?

Angesichts dieser Einschränkung fürchte ich (aus dem, was ich aus der documentation gelernt habe), dass es keine automatische Möglichkeit gibt, das zu tun, was Sie möchten (Protokolldateien nur basierend auf der Größe drehen).

Wenn Sie lediglich das Standardverhalten von Tomcat zum Erstellen eines neuen Protokolls jeden Tag (das ist für eine Entwicklungsumgebung oder eine Site mit wenig Verkehr äußerst ärgerlich) abbrechen möchten, können Sie dies sicherlich tun, indem Sie fileDateFormat ändern Eigenschaft des Zugriffsprotokolls "Valve", das auf Ubuntu Server in /etc/Tomcat7/server.xml definiert ist. Es ist wahrscheinlich an einem ähnlichen Ort für Tomcat 6.

Da Sie von einem restriktiven Sys-Administrator sprechen, stelle ich fest, dass dieser Server nicht unter Ihrer Kontrolle steht, so dass der Pfad irrelevant ist. Wenn Sie die Protokollkonfiguration von Tomcat ändern können, wissen Sie hoffentlich, wo Sie die entsprechende Datei finden.

Suchen Sie in dieser XML-Datei nach der Entity Valve mit className, die auf "org.Apache.catalina.valves.AccessLogValve" gesetzt ist, in dem Abschnitt, in dem die Engine "Catalina" für den entsprechenden Host für Ihre Site konfiguriert ist (localhost in mein Fall). Obwohl die Tomcat 6-Dokumentation dies nicht erwähnt, kann man davon ausgehen, dass das standardmäßige fileDateFormat "yyyy-MM-dd" ist. Wenn Sie den Tag in das Protokoll aufnehmen, teilt Tomcat (implizit) mit, dass das Protokoll jeden Tag gedreht werden soll. Wenn Sie möchten, dass die Datei gedreht wird, beispielsweise nur einmal im Monat, ändern Sie einfach fileDateFormat in "JJJJ-MM".

Auf meinem Server lautete die Standarddefinition für das Protokollierventil:

<Valve className="org.Apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

Um dies in eine monatliche Protokollrotation zu ändern, füge ich einfach das entsprechende fileDateFormat-Attribut hinzu:

<Valve className="org.Apache.catalina.valves.AccessLogValve" directory="logs"
           fileDateFormat="yyyy-MM" prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

Da ich Logrotate verwenden kann (und möchte), habe ich Tomcat's integrierte Protokollrotation und datumsbasierte Dateinamen vollständig deaktiviert. Ich verwende einfach Logrotate, um die Protokolle zu drehen, sobald das Protokoll 1 MB erreicht.

Edit Um die Frage von dgrant zu beantworten, wurden /etc/Tomcat7/server.xml geändert, und die eigentliche Ventilkonfiguration, die ich verwende, ist folgende:

<Valve className="org.Apache.catalina.valves.AccessLogValve" directory="logs"
       pattern="combined" rotatable="false"
       prefix="access_log" />

Beachten Sie, dass das 'kombinierte' Muster (zumindest für Tomcat 7) der expliziten Musterdefinition in der ursprünglichen Konfiguration entspricht. All dies ist in meinem ursprünglichen Dokumentationslink ausführlich beschrieben, wenn Sie mehr erfahren möchten. Suchen Sie einfach nach dem Abschnitt über das Attribut rotatable.

13
Lambart

Nur damit Sie wissen, ich habe die standardmäßige Tomcat-Protokollierung (Java.util.logging) durch Log4J ersetzt, indem ich den Anweisungen auf der Tomcat-Website folgte: http://Tomcat.Apache.org/Tomcat-6.0-doc/logging. html # Using_Log4j

6
Collin Peters

Dies sollte für Tomcat 7 einfach sein: siehe diese Dokumente

renameOnRotate-Attribut

Standardmäßig enthält der Name der aktiven Zugriffsprotokolldatei Für ein drehbares Protokoll den aktuellen Zeitstempel in fileDateFormat. Während der Rotation wird die Datei Geschlossen und eine neue Datei mit dem nächsten Zeitstempel im Namen Erstellt und verwendet. Wenn Sie renameOnRotate auf true setzen, ist der Zeitstempel Nicht mehr Bestandteil des Namens der aktiven Protokolldatei. Nur während der Rotation Wird die Datei geschlossen und umbenannt, um den Zeitstempel einzuschließen. Dies ist Ähnlich dem Verhalten der meisten Protokoll-Frameworks, wenn eine zeitabhängige -Rotation ausgeführt wird. Standardwert: false

2
Sebastian