Commons-logging with log4j2
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.
user3207875
Updated on June 13, 2022Comments
-
user3207875 almost 2 years
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 toorg.apache.logging.log4j.Logger
)Now after I upgrade to log4j2, Statement1 will not work as
Log4JLogger()
constructor expects argument of typeorg.apache.log4j.Logger
type.So, how do I use commons logging with Log4j2?
-
Mohammed Salman Shaikh over 5 yearsCan you please explain the little risk part? I am planning to stick to either apache commons logging or log4j2 in libraries. From what you have answered, I'm assuming just by adding the
log4j-to-slf4j-2.x
dependency or jar in the parent project, there will not be any issues right? Recently I faced a nightmare migrating an existing project to use log4j2, removing all slf4j related dependencies to make the project run properly. -
Remko Popma over 5 yearsSure, please see here for a detailed answer to that question: stackoverflow.com/a/41500347/1446916