Dre*_*wCo 8 java singleton log4j wrapper
我最近继承了一些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);
}
}
Run Code Online (Sandbox Code Playgroud)
这个类基本上用另一个单例包装log4j.我需要集成的类中的所有日志记录都是这样的:
public class MyClass {
private final static MyLogger log = MyLogger.getInstance();
private final static String myclass = MyClass.class.getName();
...
log.info(myclass, "Information message...");
}
Run Code Online (Sandbox Code Playgroud)
我没有看到使用额外的类进行日志记录有任何明显的好处,因此我正在考虑重构此代码以删除MyLogger类并以下列方式登录:
import org.apache.log4j.Logger;
public class MyClass {
private static Logger log = Logger.getLogger(MyClass.class);
...
log.info("Information Message...");
}
Run Code Online (Sandbox Code Playgroud)
这将使整个项目的日志记录机制保持一致.在我这样做之前,我想知道使用我可能缺少的单例类包装Log4j是否有任何好处.谢谢!
编辑:感谢大家的有用答案 - 我从每个方面获得了几个新的见解.接受内森休斯的答案,指出丢失的功能,让课程完好无损 - 我一直认为离开单身人士的最大缺点就是代码臃肿.我会把课堂弄糟.
Nat*_*hes 11
摆脱它.使用这个怪异意味着所有通过它的日志记录将使用相同的记录器(MyLogger)和方法列出(这就是为什么其方法的参数包括被记录事物的类).这意味着您不仅要为每个记录器调用添加任何类,方法和行号信息,而且不能像使用典型的log4j方法那样使用类作为记录器来对不同的包进行任何日志级别的过滤.
这件东西是一块垃圾,如果没有它,你会更好.
| 归档时间: |
|
| 查看次数: |
8106 次 |
| 最近记录: |