Commons-logging with log4j2

16,087

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.

Share:
16,087
user3207875
Author by

user3207875

Updated on June 13, 2022

Comments

  • user3207875
    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 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?

  • Mohammed Salman Shaikh
    Mohammed Salman Shaikh over 5 years
    Can 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
    Remko Popma over 5 years
    Sure, please see here for a detailed answer to that question: stackoverflow.com/a/41500347/1446916