2011-08-09 4 views
4

Y a-t-il un moyen de configurer dynamiquement les enregistreurs log4j? Je veux que chaque instance d'une classe écrive dans un fichier différent (base sur une propriété unique entre les instances). Je voudrais configurer tout sauf le fichier à partir de la configuration XML et ensuite pour chaque instance pour définir le fichier.Configuration dynamique Log4J

Y at-il un moyen de le faire en utilisant log4j?

+0

Je ne suis pas certain de comprendre, mais je pense que vous voulez créer un Appender pour chaque cours que vous avez. Vous devrez instancier le logger dans chaque classe avec le nom de la classe. J'espère que vous n'avez pas trop de classe dans votre projet parce que vous finirez avec beaucoup de .log – Cygnusx1

+0

Je veux juste cela pour une classe, qui aura plusieurs instances (disons jusqu'à 10). Et chaque instance aura un identifiant unique. Je veux que chaque instance écrive pour laisser dire le fichier ID.log – user182945

Répondre

7

Ok, à partir de votre commentaire, voici ce que je voudrais essayer.

J'imagine que vous allez créer vos 10 instances au début de votre application. en tous cas.

Dans votre log4j.xml, définir 10 appender avec name = yourUniqueId (cet identifiant unique sera assez dur codé)

Faire ces appender écrire à yourUniqueid.log

<logger name="yourUniqueId" additivity="false"> 
    <level value="INFO" /> 
    <appender-ref ref="fileAppender" /> 
</logger> 

<appender name="fileAppender" class="org.apache.log4j.FileAppender"> 
<param name="File" value="/path/yourfile.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/> 
    </layout> 
</appender> 

Ensuite, dans votre constructeur d'objet, instanciez le Logger de droite avec l'identifiant unique de l'objet.

Quelque chose comme ça:

public MyClassContructor(){ 
    String uniqueId = getMyUniqueIdFromSomewhere(); 
    logger = Logger.getLogger(uniqueId); 
} 

Je pense que vous ne voulez pas mess avec log4j.xml, alors vous devez utiliser l'API log4j et créez votre propre appender en fonction de votre identifiant unique

Quelque chose comme ceci:

public class YourClass{ 
Logger logger = Logger.getLogger(YourClass.class); 
SimpleLayout layout = new SimpleLayout(); 
FileAppender appender = null; 

public YourClass() { 
    try { 
     appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false); 
     logger.addAppender(appender); 

     logger.setLevel((Level) Level.DEBUG); 

    } 
    catch(IOException e) { 
     e.printStackTrace(); 
     logger.error("Printing ERROR Statements",e); 
    } 
} 

ainsi, chaque instance de YourClass écrirait dans un fichier journal différent. tout ce que vous avez à faire est de penser à un moyen d'obtenir cet ID unique lorsque vous appelez le constructeur.

J'espère que cela vous aidera.

Questions connexes