从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使用这种依赖:
<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>
解决方法:
Spring的一半提供了Log4j 1.2支持,但遗憾的是你没有完成这项工作(你需要深入研究Log4j2 Configurator类).
对于Web应用程序,在http://logging.apache.org/log4j/2.x/log4j-web/index.html读取文档(以及文档不够的代码),似乎您可以使用Log4J2自己的configurer进行参数替换,并从类路径加载.
将以下内容添加到您的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>
注意/ classloader之后:并且Log4j2在env变量之前需要一个sys:前缀
*但是,到目前为止,我还无法通过Spring Log4jContextListener直接迁移它.似乎Log4j2有承诺,但是现在看起来似乎采用将保留在分支上,直到它没有那么多的陷阱,并且有更好的文档*