5

从 log4j 1.2 迁移到新的 log4j 2. 添加到 pom:

<!-- Add log4j version 2 with 1.2 API -->
    <dependency>
<!--             <groupId>log4j</groupId> -->
<!--             <artifactId>log4j</artifactId> -->
<!--             <version>1.2.9</version> -->
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0-beta6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.0-beta6</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0-beta6</version>
    </dependency>

并尝试通过 Spring 上下文将其初始化为 log4j(在 log4j 1.2 上完美运行)。用于这样的配置:

<!-- Init log4j with appropriate config according to enviroment -->
<bean id="log4jConfigurer-bean" 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>classpath:config/env/log4j-${env.variable}.xml</value>
        </list>
    </property>
</bean>

但是现在好像不行了?我做错了什么?可能是spring config应该修改?对 spring 使用这样的依赖项:

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.3</version>
        <exclusions>
            <exclusion>
                <artifactId>servlet-api</artifactId>
                <groupId>javax.servlet</groupId>
            </exclusion>
        </exclusions>
    </dependency>
4

3 回答 3

6

Spring 提供的 Log4j 1.2 支持的一半已经完成,但不幸的是不是你所追求的(为此你需要深入研究 Log4j2 Configurator 类)。

对于 Web 应用程序,在http://logging.apache.org/log4j/2.x/log4j-web/index.html阅读文档(以及文档不够的代码),您似乎可以使用 Log4J2 自己的配置器进行参数替换,并将从类路径加载。

将以下内容添加到您的 pom.xml:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-web</artifactId>
    <version>2.0-beta6</version>
</dependency>

在您的 web.xml 中,使用以下内容:

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classloader:/config/env/log4j-${sys:env.variable}.xml</param-value>
</context-param>
<listener>
    <listener-class>org.apache.logging.log4j.core.web.Log4jContextListener</listener-class>
</listener>

注意 / after classloader: 并且 Log4j2 需要一个 sys: 在 env 变量之前的前缀

*但是,到目前为止,我还不能让它直接从 Spring Log4jContextListener 迁移。似乎 Log4j2 有希望,但目前看来采用仍将保留在一个分支上,直到它没有那么多陷阱,并且有更好的文档 *

于 2013-06-22T22:22:01.657 回答
0

我在尝试使用 Spring 4.1.6 更新到 log4j2 2.17.1 时遇到了同样的问题

此版本的 Log4j2 具有自动配置过程,如下所述: https ://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

我决定从我的 applicationContext.xml 中删除 Spring Log4jConfigurer 并改用 log4j2.configurationFile 选项。

于 2022-01-12T09:13:20.570 回答
-2

使用具有最新 spring 依赖项的 log4j2 的类路径

<bean id="log4jConfigurer-bean" 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>classpath:config/env/log4j2.xml</value>
        </list>
    </property>
</bean>
于 2016-08-18T13:55:40.293 回答