使用 log4j2 的公共日志记录

Commons-logging with log4j2

我正在使用 log4j 1.2 和 commons-logging。现在我正在尝试将其升级到 log4j2。 但是如何使用带有commons-logging的log4j2来初始化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 中的 class,从 log4j2 开始更改为org.apache.logging.log4j.Logger)

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

那么,如何使用 Log4j2 的公共日志记录?

您需要将 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 和实现之间提供了清晰的分离。因此,与 10 年前使用 Log4j 1 相比,现在使用包装器库的好处要少得多。

考虑直接使用 Log4j2 API:它在 API 和实现之间提供了相同的分离,并且比 commons 日志记录或 slf4j 功能更丰富。

请注意,直接使用 Log4j2 API 的风险很小:log4j-to-slf4j-2.x 模块始终存在,以防您改变主意并决定使用 Logback(或其他 slf4j 实现)直接使用 Log4j2 API 的应用程序。