web-dev-qa-db-fra.com

Comment faire pivoter le journal Tomcat localhost?

J'utilise Tomcat 6x sur un système Linux. Il imprime quotidiennement un fichier journal localhost tel que localhost.2011-06-07, localhost.2011-06-08. Je veux faire tourner le localhost quand il atteint 1MB.

Je peux faire pivoter les fichiers journaux de log4j pour mes applications Web. Mais ce fichier journal localhost de Tomcat, je ne pouvais pas le faire tourner. Quelqu'un a-t-il une solution autre que celle d'utiliser logrotate?

14
cherit

Ne voulez-vous pas utiliser logrotate ou votre administrateur système ne vous le permet-il pas?

Compte tenu de cette restriction, je crains (d'après ce que j'ai pu apprendre de documentation ) qu'il n'existe pas de moyen automatique de faire ce que vous voulez (faire pivoter les fichiers journaux en fonction de la taille uniquement).

Si vous voulez simplement arrêter le comportement par défaut de Tomcat consistant à créer un nouveau journal tous les jours (ce que je trouve extrêmement agaçant pour un environnement de développement ou un site à faible trafic), vous pouvez certainement le faire. en modifiant la propriété fileDateFormat du journal d'accès "Valve", qui est défini sur le serveur Ubuntu dans /etc/Tomcat7/server.xml . C'est probablement dans un endroit similaire pour Tomcat 6.

Puisque vous mentionnez un administrateur système restrictif, je suppose que ce serveur n’est pas sous votre contrôle, ce chemin n’est donc pas pertinent. Si vous avez la possibilité de modifier la configuration du journal de Tomcat, nous espérons que vous saurez où trouver le fichier approprié.

Dans ce fichier .xml, recherchez l'entité Valve avec className défini sur "org.Apache.catalina.valves.AccessLogValve" dans la section qui configure le "Catalina" Moteur de l'hôte approprié pour votre site (localhost dans mon cas). Bien que la documentation de Tomcat 6 ne le mentionne pas, on peut en déduire que le fichier par défaut fileDateFormat est "yyyy-MM-jj". Inclure le jour dans le nom du fichier journal indique à Tomcat (par implication) que vous souhaitez également que le journal soit soumis à une rotation quotidienne. Si vous souhaitez effectuer une rotation, disons, une fois par mois seulement, modifiez simplement le paramètre fileDateFormat en "aaaa-MM".

Sur mon serveur, la définition par défaut de la vanne de consignation était la suivante:

<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" />

Pour changer ceci en rotation mensuelle des journaux, je voudrais simplement ajouter l'attribut approprié fileDateFormat:

<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" />

Étant donné que je suis capable (et disposé) d’utiliser logrotate, j’ai complètement désactivé la rotation de journal intégrée de Tomcat et le nommage des fichiers en fonction de la date. Il suffit simplement d’utiliser logrotate pour faire pivoter les journaux lorsque celui-ci atteint 1 Mo.

Edit Pour répondre à la question de dgrant, les modifications ont été apportées à /etc/Tomcat7/server.xml, et la configuration réelle de la vanne que j'utilise est la suivante:

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

Notez que le modèle "combiné" est équivalent (au moins pour Tomcat 7) à la définition de modèle explicite de la configuration d'origine. Tout cela est bien couvert dans le lien de ma documentation originale si vous voulez en savoir plus. Il suffit de chercher la section sur l'attribut rotatable.

13
Lambart

Pour votre information, j'ai fini par remplacer la journalisation Tomcat par défaut (Java.util.logging) par Log4J en suivant les instructions du site Web de Tomcat: http://Tomcat.Apache.org/Tomcat-6.0-doc/logging. html # Using_Log4j

6
Collin Peters

Cela devrait être facile sur Tomcat 7: voir cette documentation

attribut renameOnRotate

Par défaut, pour un journal rotatif, le nom du fichier journal d'accès actif Contiendra l'horodatage actuel dans fileDateFormat. Pendant la rotation, le fichier Est fermé et un nouveau fichier avec le timestamp suivant dans le nom est Créé et utilisé. Lorsque vous définissez renameOnRotate sur true, l'horodatage Ne fait plus partie du nom du fichier journal actif. Ce n’est que pendant la rotation Que le fichier est fermé puis renommé pour inclure l’horodatage. Ceci est similaire au comportement de la plupart des infrastructures de journalisation lors de la rotation basée sur le temps . Valeur par défaut: false

2
Sebastian