Problema con Commons Registrazione / Log4j installazione in primavera webapp con tomcat 6

StackOverflow https://stackoverflow.com/questions/217929

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un problema con una registrazione del programma di installazione in un apring webapp distribuito sotto tomcat 6.

La webapp utilizza il commons-logging api, in runtime log4j dovrebbe essere usato.Il file di registro viene creato ma rimane vuoto - no voci di registro verificarsi.

la configurazione è la seguente:

WEB-INF/web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF/classes/commons-logging.proprietà:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

WEB-INF/log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

Il file di log/mio.log viene creato, ma i file di log non vengono visualizzati.Sono info registri sul tomcat console, ma non con il modello di layout configurato.

Il commons-logging-1.1.1.jar e log4j-1.2.14.jar sono inclusi in WEB-INF/lib.Qualsiasi idea di cosa c'è di sbagliato?

È stato utile?

Soluzione

Esistono numerose istanze documentate sul Web che avvertono le persone dell'uso della registrazione comune. Tanto che SLF4J sta guadagnando molta popolarità.

Considerando che non sei interessato ad usare Tomcat con Log4j, dovresti semplicemente usare Log4j direttamente nella tua applicazione. Soprattutto se non vi è alcuna possibilità che in futuro cambierete i framework di registrazione. Ridurrà la complessità della tua applicazione e eliminerà tutti i problemi del caricatore di classe che stai riscontrando con la registrazione comune.

Questa dovrebbe essere una ricerca relativamente semplice e sostituirla nel tuo testo, poiché sia ??i log comuni che log4j usano una struttura di chiamata simile per i loro metodi di registrazione.

Altri suggerimenti

Prestare particolare attenzione a non aver inserito non log4j.jar nella directory Tomcat commons / lib. Se il classloader di root carica le librerie log4j, ti imbatterai in conflitti e problemi di inizializzazione quando anche le tue webapp tentano di usare log4j.

Se devi usare log4j per la registrazione Tomcat comune, devi fare attenzione che anche le tue webapp non tentino di caricare log4j. Se hai più webapp sul server, allora avrai bisogno della disciplina che l'inizializzazione del log di ogni webapp non calpesti sull'inizializzazione di altre webapp. Ogni webapp dovrà utilizzare ID logger univoci, che possono essere realizzati con nomi di pacchetti univoci.

L'uso di un log4j comune in Tomcat con più webapp causa gravi conflitti quando si hanno librerie condivise che tutti vogliono fare il logging, come Hibernate o Spring. La webapp successiva che tenta di inizializzare log4j potrebbe chiudere il logger di quello precedente. Può essere un casino.

Ho avuto un problema simile e ho trovato una soluzione ora. Avviare tomcat con il parametro aggiuntivo:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

È necessario compilare il componente aggiuntivo per la registrazione completa dei beni comuni. Per impostazione predefinita, Tomcat 6 utilizza un'implementazione codificata del log comune che delega sempre a java.util.logging.

Istruzioni sulla costruzione qui http://tomcat.apache.org/tomcat- 6.0-doc / building.html

Quindi sostituire tomcat-juli.jar nella directory / bin di Tomcat e posizionare tomcat-juli-adaptters.jar nella directory / lib insieme a log4j e config.

se si utilizza log4j + registrazione comune, è possibile evitare la maggior parte delle configurazioni di cui sopra. LogFactory di registrazione comune ha una funzione di rilevamento simile a JAXP, nella seguente precedenza, alla ricerca di implementazioni di Log,    1. attributo di configurazione org.apache.commons.logging.Log all'interno del file commons-logging.properties    2. proprietà di sistema org.apache.commons.logging.Log    3. Se Log4J è disponibile nel percorso di classe, utilizzare la classe wrapper corrispondente (Log4JLogger).    4. Jdk14Logger    5. SimpleLog

assicurati solo che sia common-logging.jar che common-logging-api.jar e log4j.jar su classpath.

Può essere che mi sbaglio.Si prega di provare le seguenti opzioni:

A) Aggiungere appender per il mio.pacchetto:O B) Ridurre il log leve di root per INFO

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top