Archivio mensile:settembre 2012

JBoss As 7.1 e SL4J e Log4J

Problemi a loggare dalla nostra applicazione web, utilizzando jboss as 7.1?
Dopo diversi tentativi di gestire le risorse, il file di property , classloader e quanto altro, l’unica soluzione che ho trovato è la seguente.
Jboss utilizza e configura in fase di startup log4j e quindi tutti i nostri messaggi sono intercettati e gestiti dalla sua configurazione. Per bloccare questo comportamento dobbiamo usare le jboss-deployment-structure, ovvero mettere delle direttive nel nostro ear o nel nostro war, tramite file di configurazione, per indicare di escludere i moduli di jboss inerenti il logging, sull’applicazione che stiamo deployando.
Questo sistema evita che jboss in automatico inietti le dipendenze e le responsabilità del logging dei suoi moduli di logging.
il seguente file va messo nella meta-inf dell’Ear o del War.
il seguente esempio è riferito al deploy di un ear, con un war al suo interno.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
   <deployment>
     <exclusions>
       <module name="org.apache.log4j" />
       <module name="org.slf4j"/>
     </exclusions>
   </deployment>
   <sub-deployment name="miaappweb.war">
     <exclusions>
       <module name="org.apache.log4j" />
       <module name="org.slf4j"/>
     </exclusions>
   </sub-deployment>
</jboss-deployment-structure>

Spero sia chiaro.

Aggiunta per Spring:
se si utilizza anche Spring Framework, allora nella lista delle esclusioni va aggiunta anche la librera delle Commons logging, in quanto spring utilizza l’astrazione di Apache per la gestione del logging interno.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
   <deployment>
     <exclusions>
       <module name="org.apache.log4j" />
       <module name="org.slf4j"/>
       <module name="org.apache.commons.logging"/>
     </exclusions>
   </deployment>
   <sub-deployment name="miaappweb.war">
     <exclusions>
       <module name="org.apache.log4j" />
       <module name="org.slf4j"/>
       <module name="org.apache.commons.logging"/>
     </exclusions>
   </sub-deployment>
</jboss-deployment-structure>