2010-09-29 22 views
10

J'utilise log4j pour la journalisation et un fichier de propriétés pour la configuration. Actuellement, mes fichiers journaux sont trop volumineux (3,5 Go est trop volumineux pour un fichier journal). Donc, pense J'ai besoin d'utiliser RollingFileAppender - mais quand je le fais, le fichier journal continue à devenir trop volumineux. Je crois que je viens de le mal configuré; est-ce que quelqu'un a un fonctionnant exemple de configuration de RollingFileAppender?Besoin d'un exemple de configuration de log4j RollingFileAppender via les propriétés

Pour mémoire, ma configuration actuelle ressemble à ceci:

log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log 
log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender 
log4j.appender.MAIN_LOG.layout=com.mycompany.util.log.Log4JSimpleLayout 
log4j.appender.MAIN_LOG.DatePattern='.'yyyy-MM-dd 
log4j.appender.MAIN_LOG.MaxFileSize=10MB 
log4j.appender.MAIN_LOG.MaxBackupIndex=99 
log4j.appender.MAIN_LOG.append=true 
log4j.rootCategory=ALL, MAIN_LOG 

Une alternative à RollingFileAppender serait également une solution bien.

Répondre

15

Je crois que je viens de le mal configuré; Quelqu'un at-il un exemple de configuration de RollingFileAppender?

Cela semble fonctionner correctement pour moi @mcherm. Voir ci-dessous.

Êtes-vous sûr que vous utilisez le log4j.properties que vous pensez être? Essayez de changer le .File en un autre chemin pour voir si la sortie du journal va dans le nouveau fichier. Quelle version de log4j utilisez-vous? Je cours 1.2.15.

Espérons que cela aide.


J'ai créé le programme de test suivant:

package com.j256.ormlite; 
import org.apache.log4j.Logger; 
public class Foo { 
    private static Logger logger = Logger.getLogger(Foo.class); 
    public static void main(String[] args) { 
     for (int x = 0; x < 10000000; x++) { 
      logger.error("goodness this shouldn't be happening to us right here!!!!"); 
     } 
    } 
} 

Mon fichier log4j.properties détient:

log4j.appender.MAIN_LOG=org.apache.log4j.RollingFileAppender 
log4j.appender.MAIN_LOG.File=${catalina.base}/logs/webtop.log 
log4j.appender.MAIN_LOG.layout=com.j256.ormlite.Log4JSimpleLayout 
log4j.appender.MAIN_LOG.MaxFileSize=10MB 
log4j.appender.MAIN_LOG.MaxBackupIndex=5 
log4j.appender.MAIN_LOG.append=true 
log4j.rootCategory=ALL, MAIN_LOG 

Notez que j'ai enlevé la DatePattern qui ne vaut pas pour mon RollingFileAppender. Ma mise en page est:

package com.j256.ormlite; 
import org.apache.log4j.spi.LoggingEvent; 
public class Log4JSimpleLayout extends org.apache.log4j.Layout { 
    @Override 
    public String format(LoggingEvent event) { 
     return "log message = " + event.getMessage().toString() + "\n"; 
    } 
    @Override 
    public boolean ignoresThrowable() { 
     return true; 
    } 
    public void activateOptions() { 
    } 
} 

Courir avec -Dcatalina.base=/tmp/ obtenir des fichiers dans /tmp/logs/ qui vont jusqu'à l'index # 5 et sont 10mb taille. Si j'accorde le MaxFileSize ou le MaxBackupIndex, il s'ajuste de manière appropriée.

+0

Peut-être, en effet, mon problème est plus compliqué qu'un simple « je ne l'ai pas le configurer droit ». Je vais essayer de prendre ce * merveilleux * exemple que vous m'avez fourni et voir si je peux reproduire le problème et procéder à partir de là. – mcherm

5

Votre problème peut provenir du fait que vous spécifiez un DatePattern. DatePattern est destiné à être utilisé avec DailyRollingFileAppender pour spécifier la date à laquelle le fichier journal doit être généré. Je ne crois pas qu'il puisse être utilisé conjointement avec les attributs MaxFileSize et MaxBackupIndex. Log4j vous permet de faire rouler les fichiers en fonction de la taille du fichier ou de la date, mais pas des deux.

2

Lorsque nous avons besoin de fichiers journal à déployer tous les jours, nous devrions utiliser DailyRollingFileAppender au lieu de RollingFileAppender. Vous n'avez pas besoin de spécifier la limite MaxFileSize à la place de seulement DatePattern est suffisant pour le roulement des fichiers en fonction de la fréquence. J'ai essayé la configuration ci-dessous dans le fichier log4j.properties pour le roulement des fichiers journaux toutes les minutes.

log4j.appender.infoAppender = org.apache.log4j.DailyRollingFileAppender

log4j.appender.infoAppender.Seuil = INFO

log4j.appender.infoAppender.DatePattern = '.' aaaa-mm-jj-mm HH

log4j.appender.infoAppender.File = C: /logs/info.log

+1

Il a été observé que DailyRollingFileAppender présente des problèmes de synchronisation et de perte de données. Le compagnon extras log4j inclut des alternatives qui doivent être prises en compte pour les nouveaux déploiements et qui sont décrites dans la documentation de org.apache.log4j.rolling.RollingFileAppender. d'ici: http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html – Somatik

0

de démarrage en réglant le paramètre JVM -Dlog4j.debug. Cela affiche quelques lignes utiles d'informations de débogage montrant quel fichier de configuration il a trouvé et utilise, etc. Cela devrait vous donner des indices sur ce qui ne va pas.

Voir http://logging.apache.org/log4j/1.2/manual.html