3

このアプリケーションでは、log4j 構成ファイルにカスタム名を付けて、別の jar からデフォルト ファイルが誤って読み込まれないようにすることにしました。これを構成する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を介して名前を構成した場合、ログを表示できます。構成を静的ブロックとしてクラスの 1 つに配置すれば、これはなくなると思いますが、Web アプリケーションでは、これを行うのは奇妙に思えました。私が使用できる他のトリックはありますか?ここで私がフォローしている間違ったパラダイムを自由に指摘してください。

前もって感謝します!

4

1 に答える 1

2

Tomcat では、Tomcats でそのような文字列を構成できます。context.xml

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

もう 1 つの方法は、JNDI を介した構成です。

ところで、この質問を読んでくださいSpringでLog4Jを初期化しますか? 、サーブレットリスナーでjndiを介してlog4jを構成する実装へのリンクが(受け入れられた回答のコメントに)含まれています。

于 2012-09-05T05:52:40.750 に答える