我最近继承了一些Java代码,需要将其集成到我正在开发的项目中。我的项目是一个处理和转换 XML 消息的服务代理。在查看新代码时,我发现了以下日志记录类:
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);
}
}
这个类基本上用(另一个)单例包装了 log4j。我需要集成的类中的所有日志记录如下所示:
public class MyClass {
private final static MyLogger log = MyLogger.getInstance();
private final static String myclass = MyClass.class.getName();
...
log.info(myclass, "Information message...");
}
我没有看到使用额外的类进行日志记录有任何明显的好处,因此我正在考虑重构此代码以删除 MyLogger 类并按以下方式登录:
import org.apache.log4j.Logger;
public class MyClass {
private static Logger log = Logger.getLogger(MyClass.class);
...
log.info("Information Message...");
}
这将使整个项目的日志记录机制保持一致。在执行此操作之前,我想知道使用单例类包装 Log4j 是否有任何我可能缺少的好处。谢谢!
EDIT:感谢大家提供的有用答案——我从每个人身上都获得了一些新的见解。接受 Nathan Hughes 的回答,指出通过保持类完整而丢失的功能 - 我一直认为单独保留单例的最大缺点只是代码膨胀。我会把班级搞得一团糟。