2010-11-22 10 views
3

Ich habe eine Java-Webanwendung, die die SLF4J-Protokollierungsfassade verwendet. Bis heute verwenden wir die Log4J-Implementierung darunter (obwohl wir eine Umstellung auf Logback in Erwägung ziehen). Log4J wird derzeit über eine log4j.xml-Konfigurationsdatei konfiguriert, die im Stammverzeichnis unseres Klassenpfads gespeichert ist.Steuerung der Protokolldateiposition über JNDI im Frühjahr?

In jedem Fall verwenden wir JNDI, um andere Aspekte unserer Anwendung zu konfigurieren, daher bin ich sehr vertraut mit dem Einrichten und dem Abrufen einer Zeichenfolge aus JNDI in eine Spring-Konfigurationsdatei.

Ich weiß jedoch nicht, wie ich einen Log4J-Appender aus einer Spring-Konfigurationsdatei erstellen kann. Besser noch, kann man Log4J komplett über Spring konfigurieren und die log4j.xml-Konfigurationsdatei komplett überspringen? Ich hoffe, ich muss das nicht programmatisch machen.

Ich habe eine Spring-Klasse namens Log4jWebConfigurer gefunden, aber dies erfordert, dass der WAR-Lauf explodierte (will nicht, wenn ich es helfen kann) und auch, dass die Protokolldatei im Web-App-Verzeichnis befindet (definitiv nicht wollen Das).

Antwort

2

Zuerst das Hauptverzeichnis über JNDI erhalten:

<jee:jndi-lookup id="myAppHome" jndi-name="myAppHome" /> 

Dann die Bohne Verwendung in einer Frühlings-Expression Language-Anweisung in der folgenden Art und Weise:

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer" /> 
    <property name="targetMethod" value="initLogging" /> 
    <property name="arguments"> 
     <list> 
      <value>#{ myAppHome + '/conf/log4j.xml'}</value> 
     </list> 
    </property> 
</bean>