Newsgroup: it.comp.java
Titolo: Log4j e Tomcat

Ciao a tutti,
ho realizzato delle applicazioni web che si appoggiano una libreria 
condivisa. La libreria condivisa sta in $catalina_home/common/lib (è un 
archivio jar).
Le applicazioni eseguono il logging con log4j. Ogni applicazione usa un 
file di log diverso, specificato in WEB-INF/classes/log4j.properties di 
ogni applicazione. Ho dovuto inserire il jar di log4j in WEB-INF/lib di 
ogni applicazione per far funzionare la cosa. Una copia della libreria 
log4j è presente anche in $catalina_home/common/lib.
Anche la libreria condivisa utilizza log4j per il logging, ma non riesce 
a scrivere nei file di log. Se invece il log viene eseguito dalle 
applicazioni web, funziona correttamente.
Ecco quello che trovo nei log di tomcat a riguardo:
log4j:ERROR A "org.apache.log4j.RollingFileAppender" object is not 
assignable to a "org.apache.log4j.Appender" variable.
log4j:ERROR The class "org.apache.log4j.Appender" was loaded by
log4j:ERROR [org.apache.catalina.loader.StandardClassLoader@19a0c7c] 
whereas object of type
log4j:ERROR "org.apache.log4j.RollingFileAppender" was loaded by 
[WebappClassLoader
   delegate: false
   repositories:
     /WEB-INF/classes/
----------> Parent Classloader:
org.apache.catalina.loader.StandardClassLoader@983d95
].
log4j:ERROR Could not instantiate appender named "R".
log4j:WARN No appenders could be found for logger (root).
log4j:WARN Please initialize the log4j system properly.
Cercando su google una soluzione possibile è quella di copiare la 
libreria nella WEB-INF/lib di ogni applicazione. Purtroppo però non mi è 
possibile, in quanto la libreria condivisa istanzia un oggetto static 
che deve essere condiviso da tutte le applicazioni e deve quindi essere 
unica.
Come posso fare per avere anche il log della libreria condivisa? Se non 
è possibile scrivere nei log delle applicazioni mi basterebbe usare un 
file di log a parte per la sola libreria condivisa.
Grazie!
F.

 condiviso da tutte le applicazioni e deve quindi essere unica.
Questo problema dovrebbe ripresentarsi identivamente anche nella 
configurazione condivisa in quanto la JVM che esegue è la stessa.
Ciao e facci sapere.
Olindo

ratix wrote:

è un problema di clossloader. l'ho avuto dentro jboss.
usi lo stesso identico jar sia dentro tomcat che dentro le tue app ?
valuta la possibilità di compilare le applicazioni usando log4j ma
distribuirle senza ed usando quindi il log4j di tomcat (ma con il tuo
config)
-- 
Davide Consonni

 log4j.
Se inserisco la libreria in un war e ne faccio il deploy, le altre 
webapp non dovrebbero riuscire ad accedervi. C'è un modo per aggirare il 
problema?
Ciao e grazie!
F.


Se non creo una copia locale all'applicazione del log4j.jar non riesco 
ad avere un log distinto per ogni applicazione.
Mi viene in mente una cosa: è possibile configurare log4j a livello 
globale in modo da utilizzare file di log diversi a seconda della webapp 
che effettua il logging?
Ciao e grazie!
F.

 che effettua il logging?
in jboss lo puoi fare dividendo il log per nome, quindi credo anche tomcat 
esempio:
   <category name="it.miaazienda">
      <priority value="DEBUG" />
      <appender-ref ref="FILE" />
   </category>
quindi tutti i logger che cominciano per it.miaazienda usano uno specifico
appender.
-- 
Davide Consonni

Davide Consonni ha scritto:

Perfetto, con questo dovrei risolvere. Meglio se mi studio la 
documentazione di log4j ;-).
Ciao e grazie!
F.