Richtig mit Log4jConfigurer im Frühjahr
In unserer Anwendung haben wir beschlossen, name der log4j Konfigurationsdatei, wie Sie einen benutzerdefinierten Namen zu vermeiden versehentliche laden der default-Datei von einem anderen Glas. Um dies zu konfigurieren, verwenden wir org.springframework.util.Log4jConfigurer
angeben, die log4j-Speicherort.
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass">
<value>org.springframework.util.Log4jConfigurer</value>
</property>
<property name="targetMethod">
<value>initLogging</value>
</property>
<property name="arguments">
<list>
<value>classpath:com/kilo/custom-log4j.xml</value>
</list>
</property>
</bean>
Dies hilft auch, um die Konfiguration in den code und lass uns ein neuer Entwickler auf dem Boden ausgeführt (anstatt halten Sie es in einigen setenv.sh
für den container und separat für die test-Fälle). So weit wir waren so glücklich, bis wir entdeckten, dass einige wertvolle Protokollierung aus dem Spring-container selbst war, verpasste aufgrund dieser.
[ 2012-09-05 00:16:43,188 [main] support.DefaultListableBeanFactory.registerBeanDefinition():618 INFO ]: Overriding bean definition for bean 'beanA': replacing [Generic bean: class [com.kilo.spring.context.log.ClassA]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [com/kilo/spring/context/log/spring-application-context-2.xml]] with [Generic bean: class [com.kilo.spring.context.log.ClassA]; scope=; abstract=false; lazyInit=false; autowireMode=0; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=null; factoryMethodName=null; initMethodName=null; destroyMethodName=null; defined in class path resource [com/kilo/spring/context/log/spring-application-context-1.xml]]
[ 2012-09-05 00:16:43,235 [main] support.DefaultListableBeanFactory.preInstantiateSingletons():555 INFO ]: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@8453227: defining beans [org.springframework.beans.factory.config.MethodInvokingFactoryBean#0,beanB,beanA]; root of factory hierarchy
Wenn ich konfiguriert den Namen über die Eigenschaft system log4j.configuration
ich bin in der Lage, um zu sehen, die Protokolle. Ich denke, das kann gehen Weg, wenn wir setzen die Konfiguration als statischen block in eine der Klassen -, sondern in einer web-Anwendung, dies schien seltsam zu tun.
Alle anderen tricks, die ich verwenden könnte? Fühlen Sie sich frei, auf jegliche/alle falsche Paradigmen, bin ich hier Folgendes.
Vielen Dank im Voraus!
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Tomcat können Sie konfigurieren, wie Sie eine Zeichenfolge in das Kater
context.xml
Eine andere Möglichkeit wäre die Konfiguration über JNDI.
BTW Lesen dieser Frage Initialisieren Log4J mit Frühling?, es enthält einen link (in dem Kommentar von die akzeptierte Antwort), um eine Implementierung, die konfiguriert log4j über jndi im servlet-listener.