2011-01-07 4 views
6

J'essaie d'ajouter la date actuelle au fichier journal log4j. Donc, ce serait quelque chose comme ceci:Nom de fichier avec date dans Log4j

myApp-2011-01-07.log

La chose est que je ne veux pas utiliser le DailyRollingFileAppender. Raison est qu'il y aura un autre script qui s'exécute tous les jours qui sauvegardera tout dans le dossier logs. Cela fonctionne sous Tomcat5.5.

Est-ce possible dans log4j?

+0

Désolé, donc vous ne voulez pas que ça passe à la nouvelle date? Alors qu'est-ce qui se passe à minuit alors? –

Répondre

13

Je pense que vous pouvez simplement définir une propriété du système dans le code pour contenir la date actuelle:

static{ 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    System.setProperty("current.date", dateFormat.format(new Date())); 
} 

ensuite dans votre fichier log4j.xml vous pouvez utiliser la propriété système en spécifiant le nom du fichier journal dans le appender :

<appender name="MYAPPENDER" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="${user.home}/myApp-${current.date}.log" /> 

ETA: maintenant que je pense que vous pourriez avoir à installer la propriété du système en utilisant un initialiseur statique pour vous assurer que la propriété est définie avant log4j est configuré.

+0

va-t-il créer un nouveau fichier pour la nouvelle date et le jour? ou il va créer juste une fois? – Steve

+0

Cela fait un moment que j'ai regardé log4j mais je pense que l'exemple que j'ai donné créerait juste un fichier journal pour le jour où vous avez commencé votre processus. Utilisez un "RollingFileAppender" dans votre fichier log4j.xml si vous voulez un nouveau fichier journal chaque jour. – BenjaminLinus

+0

Je vais essayer, merci d'avoir répondu .. – Steve

5

Essayez le réglage dans votre fichier log4j.properties:

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.R.File=example.log 

beaucoup plus d'informations peuvent être trouvées ici http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html

+0

Donc, si je mets mon journal à tourner à minuit, qu'arrive-t-il aux anciens fichiers journaux? Chaque fichier journal porte un horodatage de fichier, donc je suis inquiet que j'aurai des fichiers journaux qui seront vieux de plusieurs mois dans le répertoire. – Sun

9

vous pouvez gérer rapidement et très simplement mantainable par la création de votre propre Appender.

il suffit de créer une classe comme ceci:

import java.text.SimpleDateFormat; 
    import java.util.Date; 
    import org.apache.log4j.FileAppender; 

    public class CustomFileAppender extends FileAppender{ 

    @Override 
    public void setFile(String fileName) 
    { 
     if (fileName.indexOf("%timestamp") >= 0) { 
      Date d = new Date(); 
      SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSS"); 
      fileName = fileName.replaceAll("%timestamp", format.format(d)); 
     } 
     super.setFile(fileName); 
    } 
} 

et placez dans vos propriétés:

log4j.appender.file=com.portima.filenet.brio.ops.tools.CustomFileAppender 
    log4j.appender.file.File=${log}/general.%timestamp.log 

Maintenant vous pouvez donner tout type de fichier que vous voulez.

Questions connexes