Commons-log with log4j2

时间:2017-01-04 10:59:29

标签: log4j2 apache-commons-logging

我正在使用log4j 1.2和commons-logging。现在我正在尝试将其升级到log4j2。 但是如何使用log4j2和commons-logging初始化log4j2。

我尝试以下面的方式初始化公共登录。工作正常

**Statement1**: static Log log = new Log4JLogger(Logger.getLogger(Example.class));
**Statement2**:log.debug("debug statement");

这里我使用org.apache.commons.logging.Log类型的对象,用org.apache.log4j.Logger对象初始化。(org.apache.log4j.Logger是log4j 1.2中的类,其中log4j2更改为{{ 1}})

现在升级到log4j2之后, Statement1 将无效,因为org.apache.logging.log4j.Logger构造函数需要Log4JLogger()类型的参数。

那么,如何使用Log4j2进行公共登录?

1 个答案:

答案 0 :(得分:8)

您需要将log4j-jcl-2.7依赖项添加到类路径中。

请参阅" which jars" question in the FAQ

在您的代码中,使用

import org.apache.commons.logging.Log; 
import org.apache.commons.logging.LogFactory; 

public class MyClass {
    private Log log = LogFactory.getLog(MyClass.class);
    ...

您不应明确使用Log4JLogger

另外,请注意Log4j2与Log4j 1的不同之处在于它提供了API与其实现之间的清晰分离。因此,与使用Log4j 1的10年前相比,使用包装器库的好处要少得多。

考虑直接使用Log4j2 API:它为您提供了API和实现之间相同的分离,并且比commons logging或slf4j更丰富。

请注意,直接使用Log4j2 API几乎没有风险:log4j-to-slf4j-2.x模块总是存在,以防您改变主意并决定对直接使用该应用程序的应用程序使用Logback(或其他slf4j实现) Log4j2 API。