Commons-logging with log4j2

戏子无情 提交于 2019-12-22 09:15:38

问题


I am using log4j 1.2 with commons-logging. Now I am trying to upgrade it to log4j2. But how to use log4j2 with commons-logging to initialize log4j2.

I tried to initialize commons logging in the below way. Its working fine

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

Here I am using object of type org.apache.commons.logging.Log initialized with object of org.apache.log4j.Logger.(org.apache.log4j.Logger is the class from log4j 1.2 where as from log4j2 is changed to org.apache.logging.log4j.Logger)

Now after I upgrade to log4j2, Statement1 will not work as Log4JLogger() constructor expects argument of type org.apache.log4j.Logger type.

So, how do I use commons logging with Log4j2?


回答1:


You need to add the log4j-jcl-2.7 dependency to your classpath.

See the "which jars" question in the FAQ.

In your code, use

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

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

You should not explicitly use Log4JLogger.

Also, be aware that Log4j2 is different from Log4j 1 in that it offers a clean separation between its API and its implementation. So the benefits of using a wrapper library are much less now than they were 10 years ago with Log4j 1.

Consider using the Log4j2 API directly: it gives you the same separation between API and implementation and is more feature rich than commons logging or slf4j.

Note that there is little risk in using the Log4j2 API directly: the log4j-to-slf4j-2.x module is always there in case you change your mind and decide to use Logback (or another slf4j implementation) with an application that directly uses the Log4j2 API.



来源:https://stackoverflow.com/questions/41462181/commons-logging-with-log4j2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!