pourquoi ne log4j pas de journal pour les fichiers que j'ai configuré avec un log4j.xml fichier?
J'ai exécuté ce dans divers environnements et n'ai jamais trouvé une explication cohérente. J'ai entendu des commentaires sur le conteneur Tomcat étant "malpropre", avec différentes implémentations de journalisation, éventuellement, là, et puis mon application ou le chargeur de classe n'a pas à connaître la configuration à utiliser.
C'est l'un de ceux affolant les scénarios lors de l'enregistrement fonctionné une fois, et puis n'est-ce pas le journal d'une heure plus tard, avec aucun changement à l'log4j.xml fichier. J'ai obtenu mon log4j.xml fichier dans la racine de mon répertoire /src, de sorte qu'il est déployé à la racine de l' /WEB-INF/classes répertoire. J'utilise la version 6 de Java, Tomcat 6, et c'est une GWT 2.3 application, l'exécution de l'intérieur Eclipse Helios sur un Windows 7 boîte.
Pour ce que ça vaut, voici le log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
</log4j:configuration>
voici comment je reçois le logger dans ma classe qui s'occupe de l'enregistrement
protected static Logger m_logger = Logger.getLogger(RemoteLoggingServiceImpl.class);
et puis effectivement journal, je viens de faire
m_logger.debug("my log message");
L'aide du code ci-dessus, il n'a pas d'écrire à la logj4.fichier journal.
Ensuite, j'ai essayé le suivant, qui a obtenu l'enregistrement sur le log4j.fichier journal, mais pas à la otherFile.fichier journal que je m'attendais. Voici la mise à jour log4j.xml fichier :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE}
%5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/log4j.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<appender name="otherFileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.home}/logs/otherFile.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d
%-5p [%c{1}] %m %n" />
</layout>
</appender>
<root>
<priority value="debug"></priority>
<appender-ref ref="fileAppender"/>
</root>
<logger name="com.mypackage.myLoggingClass">
<level value="debug"/>
<appender-ref ref="otherfileAppender"/>
</logger>
</log4j:configuration>
et j'ai créer ce logger avec ceci à la place :
protected static Logger m_logger = Logger.getLogger("com.mypackage.myLoggingClass");
Quelqu'un peut-il expliquer pourquoi il ne peut se connecter à tous dans le premier scénario, et/ou pourquoi il se connecte à log4j.journal, mais pas otherFile.journal de dans le 2e scénario?
- Je suis l'aide de log4j version 1.2.9
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous n'avez pas de liste de la version de Log4j que vous utilisez, donc je suis en supposant que vous êtes à l'aide d'un relativement récente version de Log4j.
Dans le premier bloc d'un exemple de code que vous avez fournies:
Vous n'avez pas modifié le niveau de journalisation de la racine appender. Par la
log4j 2.x de la documentation
Dans l'ordre de l'enregistreur de données de sortie pour le fichier dans le premier exemple, vous avez besoin de changer le répertoire racine de votre enregistreur à:
Un bon indicateur de l'enregistrement de débogage ne fonctionnait pas, c'est que vous n'auriez pas vu une sortie sur la console depuis le niveau d'enregistrement par défaut est réglé sur "erreur". J'aime toujours avoir une console appender sur mon bûcherons, de sorte que je peux voir que ma demande est en fait l'enregistrement.
Dans le deuxième exemple, la racine de l'enregistreur n'enregistre pas le fichier c'est précisément pour la même raison que dans le premier exemple. Cependant, vous avez réussi à mettre de la "com".mypackage.myLoggingClass" enregistreur correctement, c'est pourquoi votre demande a la sortie de débogage lorsque vous utilisez le "com.mypackage.myLoggingClass" de la classe de base de l'enregistreur.
Aussi loin que je peux voir tous les originaux de vos hypothèses sont correctes et que le journal doit être imprimé, alors voici quelques choses que je voudrais vérifier dans ce cas:
Votre JRE utilise un fichier nommé
logging.properties
pour définir les gestionnaires et les niveaux de journal et de quelques autres paramètres afin d'être partagées avec le monde entier à travers toutes les commandes Java.Beaucoup une fois qu'il est vu que par défaut est
handlers= java.util.logging.ConsoleHandler
, vous pouvez essayer d'ajouterjava.util.logging.FileHandler
comme ci-dessous.Également essayer de réglage le fichier formateur à SimpleFormatter au lieu de XML formateur