我正在使用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进行公共登录?
答案 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。