【问题标题】:Java - How to configure log4j2.xmlJava - 如何配置 log4j2.xml
【发布时间】:2019-11-27 08:25:30
【问题描述】:

我想通过我的 applicationContext.xml 而不是 web.xml 配置 log4j2.xml 文件。如果这个 log4j2.xml 文件存在于类路径中,我不能在这个文件中做任何改变。所以,我应该配置这个 applicationContext.xml。

pom.xml

<dependency> 
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.6.0</version>
    </dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.11.1</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

applicationContext.xml

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetClass"
                  value="org.apache.logging.log4j.LogManager" />
        <property name="targetMethod" value="getContext" />
        <property name="arguments">
            <list>
                <value>false</value>
            </list>
        </property>
    </bean>

    <bean id="log4jContext" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <property name="targetObject" ref="log4jInitialization"/>
        <property name="targetMethod" value="setConfigLocation"/>
        <property name="arguments">
            <list>
                <value>C:/projects/conf/log4j2.xml</value>
            </list>
        </property>
    </bean>

我认为 LoggerContext 类没有 setConfigLocation() 方法,因为 getContext() 返回 log4j-api 的 LoggerContext 类而不是 log4j-core 的。

我该如何处理这种情况?感谢您的帮助。

【问题讨论】:

  • 您是否正在寻找一种将 log4j 配置外部化的方法?
  • 是的,我想更改 log4j2.xml 文件的位置和内容,但是如果我在 web.xml 中配置 log4j2,我无法在不部署新版本的情况下进行任何更改,因为 web.xml 位于类路径中。所以,我应该在 applicationContext.xml 中配置。
  • 您可以尝试以下方法,看看它是否适合您。 a) 在应用程序属性文件中添加 logging.config=${user.home}/projectName/log4j-yourLogging.properties,该文件将驻留在您启动应用程序的目录中,b) 此 application.properties 将覆盖 /resources /application.properties 和 log4j-yourLogging.properties 将用于环境。

标签: java spring-mvc websphere log4j2 tomcat8.5


【解决方案1】:

我使用了如下所示的代码,当我使用Tomcat服务器时我成功了,但是如果我使用WebSphere服务器,程序不会将日志打印到文件中。

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetClass"
              value="org.apache.logging.log4j.core.LoggerContext" />
    <property name="targetMethod" value="getContext" />
    <property name="arguments">
        <list>
            <value>false</value>
        </list>
    </property>
</bean>

<bean id="log4jContext" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
    <property name="targetObject" ref="log4jInitialization"/>
    <property name="targetMethod" value="setConfigLocation"/>
    <property name="arguments">
        <list>
            <!--<value>classpath:log4j2.xml</value>-->
            <value>file:c:/projects/conf/log4j2.xml</value>
        </list>
    </property>
</bean>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    相关资源
    最近更新 更多