2010-12-07 6 views
4

Je suis très nouveau à log4j, alors s'il vous plaît soyez doux. Mais voici ce qui se passe et je ne sais pas pourquoi: il se connecte correctement à un fichier, mais le nom de fichier du journal créé semble être faux.Log4j se connectant à log4j.log au lieu du nom de fichier spécifié

Voici ma config log4j:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

<appender name="console" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] %m%n"/> 
    </layout> 
</appender> 


<appender name="file" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="log/messagecount.log" /> 
    <param name="Append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="[%d{HH:mm:ss,SSS}] [%-5p] (%t) [%c{1}] - %m%n"/> 
    </layout>   
</appender>  

<root> 
    <level value="debug"/>  
    <appender-ref ref="file"/> 
    <!-- <appender-ref ref="rolling"/> --> 
</root> 

</log4j:configuration> 

Il crée un fichier log4j.log dans le dossier du journal au lieu d'un fichier messagecount.log. Est-ce que cette propriété de valeur ne fait pas ce que je pense qu'elle fait?

Voilà comment j'initialiser le enregistreur:

variable de niveau de classe:

private static Logger logger = Logger.getLogger(MessageCount.class); 

Et la fonction init:

private void initLogger() throws IOException { 

    Properties props = new Properties(); 
    props.load(getClass().getResourceAsStream("/log4j.xml")); 
    PropertyConfigurator.configure(props); 

    logger.info("----------Logger init-----------") ; 

//  logger.debug("Sample debug message"); 
//  logger.info("Sample info message"); 
//  logger.warn("Sample warn message"); 
//  logger.error("Sample error message"); 
//  logger.fatal("Sample fatal message"); 

} 

Le fichier de configuration log4j.xml est à la racine mon dossier src.

Merci

+1

Vous n'avez pas besoin de cette fonction init. Supprime-le. Il suffit de mettre 'log4j.xml' dans le classpath de votre application (bin ou le dossier de construction, il ne sera pas trouvé dans le dossier src) et votre application le trouvera automatiquement. – darioo

Répondre

0

L'a reçu! Voici ce qui se passait, et je voudrais d'abord remercier darioo et dogbane pour leurs réponses/commentaires car ils m'ont aidé à le comprendre.

La fonction init n'est pas nécessaire. Et en utilisant -Dlog4j.debug = true car un paramètre JVM m'a montré qu'il chargeait déjà une copie du fichier de configuration xml qui se trouvait dans le dossier bin.

Donc, si je me débarrasse de la fonction init, et placez le correct config xml dans le dossier bin, cela fonctionne.

0

J'ai fait une copie de votre & coller le fichier xml et, pour commencer, la configuration log4j renvoie une erreur car ce fichier est pas un xml valide. Vous avez oublié d'ajouter

</log4j:configuration> 

comme dernière ligne. Cela aurait pu être la source de votre problème? Après la correction, log4j démarre correctement et crée un fichier nommé log/messagecount.log.

J'utilise log4j 1.2.15. Si votre configuration n'est pas la même, essayez de poster votre version de log4j et votre environnement. En outre, essayez de nommer votre fichier différemment, comme log/somelog.log, ou simplement somelog.log pour que vous puissiez voir comment se comporte log4j.

+0

Oups! erreur de copier-coller. En outre, j'ai log4j aujourd'hui, hors de leur site Web, donc c'est la version 1.2.16 – CrazyPenguin

+0

@ Matthew: essayé avec 1.2.16. Le résultat est le même. Publiez plus d'informations sur votre environnement. – darioo

+0

@Nathan: bon point. Pour les nouveaux projets, je recommande toujours [slf4j] (http://www.slf4j.org/) + [logback] (http://logback.qos.ch/index.html). – darioo

2

Fonctionne pour moi.

Essayez d'ajouter -Dlog4j.debug=true à vos paramètres JVM pour obtenir plus d'informations sur ce que log4j fait et pourquoi il est l'exploitation forestière à log4j.log.

Questions connexes