2010-06-01 10 views
3

J'utilise la bibliothèque Apache commons logging logging et log4j pour générer mes fichiers journaux.Créer un nouveau fichier journal à chaque fois que mon programme est exécuté

Maintenant je veux créer un nouveau fichier chaque fois que j'exécute mon programme. Le nombre actuel doit être ajouté au nom du fichier journal.

Par exemple: program_1.log program_2.log program_3.log

Savez-vous comment je pourrais y parvenir?

+2

Toute raison pour laquelle vous ne voulez pas utiliser un horodatage? Je les ai trouvés plus significatifs en tant que suffixes quand je dois regarder en arrière les dossiers de notation. –

+0

Ce serait aussi une solution ... –

+0

Benjamin Oakes, J'utilise maintenant un horodatage. Faites votre commentaire à une réponse afin que je puisse le cocher comme le bon. –

Répondre

1

Tournant commentaire dans une réponse, comme l'a demandé:

Toute raison pour laquelle vous ne voulez pas utiliser un horodatage? Je les ai trouvés plus significatifs en tant que suffixes quand je dois regarder en arrière les dossiers de notation.

+0

J'utilise donc le TimestampFileAppender (http://markmail.org/message/5on2bmatywehnbn7) maintenant. –

0

Il semble que Log4J ne supporte pas cela. Cependant, il existe un Log4J Extras Companion, contenant ses propres , qui semble être assez librement configurable via les paramètres RollingPolicy et TriggeringPolicy. Vous pouvez donc essayer de mettre en place votre propre politique.

0

Je suppose que vous avez l'intention de créer un nouveau fichier pour chaque instance JVM. Je pense que vous pouvez implémenter cela (pas trivial mais pas difficile) en étendant FileAppender. Vous pouvez regarder le code de DatedFileAppender pour un peu d'inspiration.

1

Je pense que cela ne soit pas pris en charge par log4j, vous devez créer votre propre implémentation, l'extension FileAppender:

public class CustomAppender extends FileAppender { 

... 

    public 
    CustomAppender(Layout layout, String filename, boolean append, boolean bufferedIO, 
       int bufferSize) throws IOException { 
    this.layout = layout;  
    // file name will be the basis; you should calculate the suffix yourself 
    customname = filename + ... 
    this.setFile(customname, append, bufferedIO, bufferSize); 
    } 

... 
0

De façon moins élégante, chaque fois que votre programme fonctionne, il pourrait créer un fichier log_num.dat où il gardera trace d'un seul numéro (le prochain fichier journal à créer).

1

This article donne un exemple d'écriture dans un fichier journal dynamiquement déterminé. Cela vous donne la possibilité de déterminer quel nom de fichier vous voulez quand votre programme démarre.

Le plus difficile est de savoir quel est le nombre actuel. Il est probablement plus simple de faire une recherche binaire des noms de fichiers pour trouver le nom de fichier le plus élevé - ce ne serait pas trop grave - nécessitant des tests d'existence de fichiers log n où n est le nombre de logs. Si vous avez 1 million de logs, ce n'est que 20 contrôles de fichiers.

0

cela fonctionne pour moi,

<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="Threshold" value="TRACE" /> 
    <param name="File" value="amLog.log"/> 
    <param name="DatePattern" value="'.'YYYY-MM-dd-HH-mm"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d %-5p [%c{1}] %m %n" /> 
    </layout>