正确使用Log4jConfigurer春(Correctly using Log4jConfigur

2019-09-22 03:25发布

在我们的应用程序,我们决定命名log4j的配置文件作为自定义名称,以避免从另一个罐子里默认的文件无意中加载。 要配置此,我们使用org.springframework.util.Log4jConfigurer指定log4j的位置。

<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>

这也有助于保持所有的配置代码,让我们一个新的开发者旗开得胜(而不是保持它在一些setenv.sh的容器并单独的测试案例)。 到目前为止,我们已足够幸福,直到我们发现,从Spring容器本身的一些有价值的记录已错过了缘于此。

[ 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

如果我通过系统属性配置的名称log4j.configuration我能看到的日志。 我想这可以走,如果我们把配置中的类的一个静态块 - 但在web应用程序,这似乎很奇怪的事情。 任何其他的技巧,我可以用? 随意地指出,我在这里以下任何/所有不正确的范例。

提前致谢!

Answer 1:

在Tomcat中,您可以配置在雄猫这样的字符串context.xml

<Parameter name="log4j.configuration" value="whereEver"/>

另一方法是通过JNDI是配置。

BTW阅读这个问题初始化的Log4J与Spring? ,它包含了一个链接(在接受答案的评论),以在一个servlet监听器通过JNDI配置的log4j的实现。



文章来源: Correctly using Log4jConfigurer in Spring