2017-02-10 4 views
3

Je déploie un service web en tant qu'application web (guerre) sur Tomcat 8.0.24. Les pots d'application ont déjà été testés et ils fonctionnent bien. Maintenant, pour configurer et tester les objectifs de log4j, j'ai provoqué une erreur d'exécution (pas de db connecté).Comment configurer log4j2 pour une application Web dans Tomcat 8?

J'essaye de placer le log4j2 pour la notation d'application seulement (pas pour tomcat) et j'utilise Netbeans 8.0.2 pour construire la guerre.

J'ai inclus des bocaux suivants dans classpath:

log4j-api-2.8.jar 
log4j-core-2.8.jar 
log4j-web-2.8.jar 
log4j-jcl-2.8.jar 
commons-logging.jar 

Et log4j2.xml dans WEB-INF, avec seulement enregistreur racine configuré pour attraper tout ce qui vient de l'application web:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration strict="true" status="TRACE"> 
    <Properties> 
    <Property name="filename">C:\logs\Myapp.log</Property> 
    </Properties> 
    <Appenders> 

    <Appender type="Console" name="Console" target="SYSTEM_OUT"> 
     <Layout type="PatternLayout"> 
     <Pattern>%d{HH:mm:ss.SSS} - %-5level %logger - %msg%n</Pattern> 
     </Layout> 
    </Appender> 
    <Appender type="File" name="FileAppender" fileName="${filename}" append="true" immediateFlush="true"> 
     <Layout type="PatternLayout"> 
     <Pattern>%d %p %logger -%C- %m%n</Pattern> 
     </Layout> 
    </Appender> 
    </Appenders> 
    <Loggers> 
    <Root level="ERROR"> 
     <AppenderRef ref="Console"/> 
     <AppenderRef ref="FileAppender" level="WARN"/> 
    </Root> 
    </Loggers> 
</Configuration> 

Je également configuré catalina.properties, juste au cas où, pour surcharger jars par défautToSkip:

tomcat.util.scan.StandardJarScanFilter.jarsToScan=log4j-core*.jar,log4j-taglib*.jar,log4j-api*.jar,log4j-web*.jar,log4j-jcl*.jar` 

Je crois log4j est correctement initialisé comme catalina * états .log, en raison de l'état = « TRACE »:

2017-02-08 14:06:52,355 http-nio-8080-exec-8 DEBUG Log4jServletContextListener ensuring that Log4j starts up properly. 
2017-02-08 14:06:52,357 http-nio-8080-exec-8 DEBUG Log4jServletFilter initialized. 

Et aussi parce que le fichier journal est créé.

Cependant, tous les messages d'erreur d'exécution provenant de l'application (jar de service Web) se terminent en catalina * .log au lieu de l'appender que j'ai configuré. En outre, ces messages d'erreur dans catalina * .log ne suivent aucun modèle défini dans les définitions Appenders, donc il semble que log4j2 soit ignoré.

Qu'est-ce que je fais mal?

Répondre

1

Dans la documentation log4j je trouve qu'il ya une log4j 1.2 API sous Composants et il affirme qu'il « permet aux applications codées d'utiliser Log4j 1.2 API pour utiliser Log4j 2 à la place. » Eh bien, j'ai trouvé que les bocaux de l'application étaient développés en utilisant la version précédente de log4j. Donc, je inclus log4j-1,2-api-2.8.jar et enlevé log4j-JCL-2.8.jar et communes-logging.jar et qui a fait l'affaire. Les messages du journal de l'application sont maintenant envoyés au fichier configuré en tant qu'appendice. Peut-être qu'il vaut la peine de mentionner que le premier test après avoir ajouté log4j-1.2-api-2.8.jar ne fonctionnait pas, donc je suppose que cela fait un peu de conflit avec les pots que j'ai retirés plus tard.