I recently inherited some Java code and have to integrate it into the project I'm working on. My project is a service agent that processes and converts XML messages. Looking through the new code, I discovered the following logging class:
import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Level; import org.apache.log4j.Logger; public class MyLogger { private static MyLogger instance = null; protected final static Logger log = Logger.getLogger(MyLogger.class); private MyLogger() { super(); } public static MyLogger getInstance(){ if(instance == null){ instance = new MyLogger(); BasicConfigurator.configure(); log.setLevel(Level.ALL); } return instance; } public void info(String myclass, String msg) { log.info("[" + myclass + "] " + msg); } public void error(String myclass, String msg, Exception ce) { log.error("[" + myclass + "] " + msg, ce); } public void warning(String myclass, String msg) { log.warn("[" + myclass + "] " + msg); } }
This class basically wraps log4j with a (different) singleton. All the entries in the classes that I need for integration look something like this:
public class MyClass { private final static MyLogger log = MyLogger.getInstance(); private final static String myclass = MyClass.class.getName(); ... log.info(myclass, "Information message..."); }
I donβt see the obvious benefit of using an additional class for logging, so I am considering reorganizing this code to remove the MyLogger class and log in as follows:
import org.apache.log4j.Logger; public class MyClass { private static Logger log = Logger.getLogger(MyClass.class); ... log.info("Information Message..."); }
This will make the logical mechanism consistent in the design. Before I do this, I would like to know if there are any advantages to wrapping Log4j with a singleton class that might be missing. Thank you
EDIT: Thanks to everyone for the helpful answers - I am recruiting several new ideas from each. He accepted the answer of Nathan Hughes, pointing to the lost functionality, leaving the class intact - I assumed that the biggest drawback for exiting a singleton is simply bloating the code. I will destroy the class.
java singleton log4j wrapper
DrewCo
source share