155 votes

Où dois-je placer le fichier log4j.properties ?

J'ai écrit un projet de service web en utilisant netbeans 6.7.1 avec glassfish v2.1, j'ai mis log4j.properties dans le répertoire racine du projet et je l'ai utilisé :

static Logger logger = Logger.getLogger(MyClass.class);

dans Constructeur :

PropertyConfigurator.configure("log4j.properties");

et dans les fonctions :

logger.info("...");
logger.error("...");
// ...

mais, c'est une information sur les erreurs (en fait, j'ai essayé de la mettre dans presque toutes les directions que j'ai pu réaliser) :

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

le projet d'exemple peut être obtenu à partir de http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8

2 votes

À quoi sert la ligne PropertyConfigurator.configure("log4j.properties"); ? Je n'utilise jamais cette ligne. Votre fichier log4j.xml doit seulement être "quelque part" dans votre classpath.

1 votes

Regardez stackoverflow.com/questions/1140358/ pour trouver, comment la configuration de log4j elle-même est enregistrée. Je pense que cela devrait vous aider, car certains conteneurs ont leur propre configuration log4j.

0 votes

@AntoineClaval J'ai enlevé cette maudite ligne et ça a marché comme sur des roulettes. Mec, quel manège

123voto

miss Points 571

Je sais qu'il est un peu tard pour répondre à cette question et que vous avez peut-être déjà trouvé la solution, mais je publie la solution que j'ai trouvée (après avoir beaucoup cherché sur Google) afin qu'elle puisse vous aider un peu :

  1. Mettre log4j.properties sous WEB-INF \classes du projet comme mentionné précédemment dans ce fil.
  2. Mettre log4j-xx.jar sous WEB-INF \lib
  3. Test si log4j a été chargé : ajouter -Dlog4j.debug à la fin de vos options java de tomcat

J'espère que cela vous aidera.

rgds

0 votes

Utilisez la commande 'run' pour mettre tomcat au premier plan ; vous pouvez passer des options java via la ligne de commande. De plus, l'option -x de bash est utile pour voir ce qui se passe exactement avec vos options : JAVA_OPTS=-Dlog4j.debug bash -x /usr/local/tomcat/bin/catalina.sh run

59voto

stivlo Points 28997

Comme déjà dit, log4j.properties devrait être dans un répertoire inclus dans le classpath, je veux ajouter que dans un projet mavenisé un bon endroit peut être src/main/resources/log4j.properties

31voto

Makatun Points 158

Vous pouvez spécifier l'emplacement du fichier de configuration avec l'argument VM -Dlog4j.configuration="file:/C:/workspace3/local/log4j.properties".

0 votes

Est-ce que c'est file:/ ou file:/// ou juste /path/to/file sur un système unix ?

0 votes

Sous Windows, c'est juste file:/, je suppose que c'est la même chose sous Unix.

0 votes

C'est, à mon avis, la seule réponse qui tienne compte de plusieurs environnements ayant des niveaux d'enregistrement différents.

26voto

KLE Points 11711

Vous devez le placer dans le répertoire racine, qui correspond à votre contexte d'exécution.

Exemple :

    MyProject
       src
           MyClass.java
           log4j.properties

Si vous démarrez l'exécution à partir d'un autre projet, vous devez avoir ce fichier dans le projet utilisé pour démarrer l'exécution. Par exemple, si un autre projet contient des tests JUnit, il doit aussi avoir son fichier log4j.properties.


Je suggère d'utiliser log4j.xml au lieu de log4j.properties. Vous avez plus d'options, vous pouvez obtenir de l'aide de votre IDE, etc...

0 votes

Dans l'exemple, je l'ai presque mis dans tous les répertoires, mais cela n'est pas utile au projet de déploiement Glassfish, car GF ne copie pas les propriétés dans le bon répertoire. Il semble que GF le perde.

0 votes

En fait, je pense que le problème vient du déploiement automatique de Netbeans. J'essaie de déployer par fichier war dans la console d'administration, c'est ok. Je ne sais pas si j'avais raison. Si c'est le cas, pourquoi Netbeans ne déploie pas ces fichiers lors du déploiement automatique du projet ?

0 votes

Cela a fonctionné ! mais n'est-ce pas inélégant ... je pense que c'est mieux placé dans un dossier de type "ressources".

13voto

Ani Points 89

Si vous placez log4j.properties dans src, vous n'avez pas besoin d'utiliser l'instruction -

PropertyConfigurator.configure("log4j.properties");

Il sera pris automatiquement puisque le fichier de propriétés se trouve dans le classpath.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X