IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Logging Java Discussion :

[Log4J] Dater le fichier de log


Sujet :

Logging Java

  1. #1
    Membre du Club
    Inscrit en
    septembre 2003
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 101
    Points : 57
    Points
    57
    Par défaut [Log4J] Dater le fichier de log
    Hello,

    Je souhaite dater mon fichier de log (du type fichier_aaaammjj.log) lors de sa création. J'ai tenté un appender DailyRollingFileAppender mais celui-ci ne date le log que lorsque la date change. De plus, il semble impossible de nommer le fichier comme je le veux.

    J'ai donc créé une classe LoggerManager qui récupère les paramètres de log4j.properties et modifie le nom du fichier lors de l'initialisation. Mais j'ai une erreur "attempted to append to closed appender"...

    Voici la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import org.apache.log4j.FileAppender;
    import org.apache.log4j.Logger;
    import org.apache.log4j.PropertyConfigurator;
     
    public class LoggerManager {
     
    	private static final Logger logger = Logger.getLogger("org.mon.package");
    	private static boolean initialized;
     
    	public static Logger getLogger() {
    		if (!initialized) {
    			init();
    		}
    		return logger;
    	}
     
    	public static void init() {
    		String fileName;
    		SimpleDateFormat sdf;
    		FileAppender datedFileAppender;
     
    		PropertyConfigurator.configure("log4j.properties");
     
    		sdf = new SimpleDateFormat("yyyyMMdd");
     
    		datedFileAppender = (FileAppender) logger.getAppender("file-dumper");
    		fileName = datedFileAppender.getFile();
    		fileName = fileName.substring(0, fileName.length()-4) + sdf.format(new Date()) + fileName.substring(fileName.length()-4, fileName.length());		
    		datedFileAppender.setFile(fileName);
     
    		logger.removeAllAppenders();
    		logger.addAppender(datedFileAppender);
     
    		initialized = true;
    	}
    }
    Et log4j.properties :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    # Loggers
    log4j.rootLogger=DEBUG, console-dumper
    log4j.logger.org.mon.package=DEBUG, file-dumper
     
    # Appender console
    log4j.appender.console-dumper=org.apache.log4j.ConsoleAppender
    log4j.appender.console-dumper.layout=org.apache.log4j.PatternLayout
    log4j.appender.console-dumper.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss} [%-5p] %m%n
     
    # Appender fichier
    log4j.appender.file-dumper=org.apache.log4j.FileAppender
    log4j.appender.file-dumper.File=D:/trace.log
    log4j.appender.file-dumper.layout=org.apache.log4j.PatternLayout
    log4j.appender.file-dumper.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss} [%-5p] %m%n
    Comment s'y prendre pour que ça marche ? Un appender DailyRollingFile bien configuré pourrait-il répondre à ce besoin ?

    Merci !

  2. #2
    Membre du Club
    Inscrit en
    septembre 2003
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : septembre 2003
    Messages : 101
    Points : 57
    Points
    57
    Par défaut
    Finalement j'ai viré la class LoggerManager et créé mon propre appender dérivé de FileAppender.

    Voilà le code pour ceux que ça intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import org.apache.log4j.FileAppender;
     
    public class DatedFileAppender extends FileAppender {
     
    	private String datePattern = "yyyy-MM-dd";
     
    	public void setFile(String strFile) {
    		String strDate;
    		SimpleDateFormat sdf;
     
    	    if (datePattern!=null && strFile!=null) {
    	        sdf = new SimpleDateFormat(datePattern);
    	        strDate = sdf.format(new Date());
    	        fileName = strFile.replaceAll("%date%", strDate);
    	      } else {
    	    	  System.err.println("Either File or DatePattern options are not set for appender [" + name + "].");
    	      }
    	}
     
    	public String getDatePattern() {
    		return datePattern;
    	}
     
    	public void setDatePattern(String datePattern) {
    		this.datePattern = datePattern;
    	}
    }
    Et l'entrée log4j associée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    log4j.appender.file-dumper=mon.package.DatedFileAppender
    log4j.appender.file-dumper.File=D:/logs/appli_%date%.log
    log4j.appender.file-dumper.DatePattern=yyyyMMdd
    log4j.appender.file-dumper.layout=org.apache.log4j.PatternLayout
    log4j.appender.file-dumper.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss} [%-5p] %m%n
    C'est simple et ça marche exactement comme je veux. J'aurais dû y penser plus tôt

  3. #3
    Membre régulier Avatar de waldo2188
    Profil pro
    Chef de projets
    Inscrit en
    mars 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Chef de projets

    Informations forums :
    Inscription : mars 2004
    Messages : 115
    Points : 113
    Points
    113
    Par défaut
    un grand merci pour le code!

    C'est exactement ce que je cherchais à faire.

    J'ai cependant une question. Es-ce qu'un nouveau fichier est créé chaque jour?

    Par avance merci!
    Waldo2188

  4. #4
    Membre à l'essai
    Profil pro
    Développeur Web
    Inscrit en
    août 2009
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : août 2009
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Super, ça marche niquel.

    Si on change la date du système, il y a bien un nouveau fichier. C'est exactement ce qu'il me fallait, merci !

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/02/2014, 08h40
  2. [log4j] Affichage dans fichier de log
    Par wystan dans le forum Logging
    Réponses: 3
    Dernier message: 20/04/2009, 12h20
  3. LOG4J configuration du fichier de log
    Par *alexandre* dans le forum Logging
    Réponses: 1
    Dernier message: 19/01/2009, 10h14
  4. [Log4j] Externaliser nom du fichier de log
    Par JnJp28 dans le forum Logging
    Réponses: 1
    Dernier message: 08/01/2008, 19h15
  5. [log4j] emplacement des fichiers .log
    Par danyboy85 dans le forum Logging
    Réponses: 7
    Dernier message: 18/01/2007, 08h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo