2016-05-19 2 views
2

J'ai recherché des questions similaires, mais aucune des réponses n'a vraiment résolu le problème. J'ai une application Spring Boot configurée pour utiliser slf4j + log4j2 (avec une configuration log4j2.xml interne dans src/main/resources). Je déploie cette guerre sur JBoss EAP (6.4 & 7) et peux voir les traces de journal du démarrage de JBoss. Le problème est que log4j2 appenders juste ne pas imprimer quoi que ce soit, ni sur la console ni sur le fichier:JBoss EAP 6.4/7 - La configuration log4j2.xml interne de l'application Spring Boot ne s'exécute pas sur la console

  • Dans la console que les journaux de journalisation jboss apparaissent (tous les log.info() dans mon traces d'application avec le format de journalisation jboss).

  • Un c:\logs\out.logest créé mais rien n'est écrit dessus.

Ce sont les choses que je l'ai fait:

  1. Je débogués et vérifié que Printemps Boot Log4J2LoggingSystem est correctecty initialisé avec le fichier classpath:log4j2.xml.

  2. Mon application utilise SLF4J et pendant le débogage j'ai vu que la mise en œuvre de l'exploitation forestière sous-jacente est l'exploitation forestière de JBoss au lieu de Log4j2

  3. L'enregistrement de log4j2 fonctionne correctement sur Tomcat.

  4. Dans standalone.xml j'ai supprimé <extension module="org.jboss.as.logging"/> et le bloc <subsystem xmlns="urn:jboss:domain:logging:3.0">. Après cela, seules quelques traces jboss sont imprimées sur la console (mais rien de l'application log.info()), mais l'appender log4j2 imprime correctement.

Comment configurer JBoss pour prendre en charge l'impression log4j2.xml de l'application sur la console et un fichier?

Extrait log4j2.xml:

<Configuration status="WARN"> 
    <Appenders> 
     <Console name="console" target="SYSTEM_OUT"> 
      <PatternLayout ... 
     <RollingFile name="file" 
      filePattern="'.'%d{yyyy-MM-dd}" 
      fileName="c:\logs\out.log"> 
      <PatternLayout 
       pattern="%d{yyyy-MM-dd'T'HH:mm:ss.SSS} - %c{1.} %5p - %m%n" /> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
      </Policies> 
     </RollingFile> 
    <Logger name="org.springframework" level="info" additivity="false"> 
     <AppenderRef ref="file" /> 
     <AppenderRef ref="console" /> 
    </Logger> 
</Configuration> 

MISE À JOUR

Le problème a à voir avec la façon dont JBoss gère SLF4J:

org.slf4j.Logger slf4jLogger = org.slf4j.LoggerFactory.getLogger(PresupuestoController.class); 
org.apache.logging.log4j.Logger log4j2Logger = LogManager.getLogger(PresupuestoController.class); 

Si je cours slf4jLogger.info("SLF4J!!!");. Il imprime avec l'enregistreur JBoss sous-jacent:

11:19:03,122 INFO [com.my.web.SomeController] (default task-2) SLF4J!!! 

mais quand j'exécute log4j2Logger.info("LOG4J2!!!"); imprime sur la console suivant la configuration de mon log4j2.xml:

11:19:03,668 INFO [stdout] (default task-2) 2016-05-19T11:19:03.663 c.m.w.SomeController INFO - LOG4J2!!! 

Comme condition que je dois utiliser SFL4J dans le code J'ai donc besoin d'un moyen de forcer à utiliser Log4j2 au lieu de JBoss.

Répondre

3

Après avoir lutté avec cela, voici ce qui a finalement travaillé dessus: l'ajout d'un fichier jboss-deployment-structure.xml à mon dossier WEB-INF avec ce contenu:

<jboss-deployment-structure> 
    <deployment> 
     <exclusions> 
      <module name='org.slf4j' /> 
      <module name='org.slf4j.impl' /> 
     </exclusions> 
    </deployment> 
</jboss-deployment-structure> 

Maintenant journalisation JBoss continue de fonctionner, mais aussi me permet pour utiliser SFL4J + Log4j2 dans mon code d'application.

+0

Ne fonctionnait pas pour moi dans JBoss AS 7.1. Etes-vous sûr que ce qui précède est la seule chose à faire? N'avez-vous pas manqué des étapes supplémentaires? –

0

J'ai également eu du mal à faire fonctionner log4j2 sur JBoss 6.

Si vous utilisez une application web, mettez plutôt le fichier de configuration XML sous src/main/webapp/WEB-INF/log4j2.xml

assurez-vous aussi avez les dépendances correctes, et évidemment , étant donné que vous êtes défini sur "WARN", vous consignez au moins le niveau WARN/ERROR.

<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-api</artifactId> 
    <version>2.1</version> 
</dependency> 
<dependency> 
    <groupId>org.apache.logging.log4j</groupId> 
    <artifactId>log4j-core</artifactId> 
    <version>2.1</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.5</version> 
</dependency> 
+0

Merci d'avoir répondu, je viens de la question mis à jour, il semble être Quelque chose lié à SFL4J ... – codependent

1

Pour une application EAR (Spring MVC), je devais mettre ce jboss-déploiement structure.xml dans META-INF:

<jboss-deployment-structure> 
    <deployment> 
     <exclude-subsystems> 
      <subsystem name="logging"/> 
     </exclude-subsystems> 
    </deployment> 
</jboss-deployment-structure>