我必须更换所有关闭的 e.printStackTrace();与记录器。但是大约有2000个类(class)。我可以替换 Eclipse 中的所有内容,但我必须为所有类定义 Logger。您有什么建议的解决方案吗?
最佳答案
除了执行 CTRL
+H
并找到所有 e.printStackTrace();
并替换它们之外,您还可以采取另一种方法创建记录器工厂。
public class LoggingFactory {
private static LoggingFactory instance;
private Map<Class, Logger> loggers;
public static synchronized LoggingFactory getInstance() {
if(instance == null) {
instance = new LoggingFactory();
}
return instance;
}
public static Logger getLogger(Class clazz) {
synchronized (clazz) {
if(getInstance().loggers.get(clazz) == null) {
getInstance().loggers.put(clazz, Logger.getLogger(clazz.getName()));
}
return getInstance().loggers.get(clazz);
}
}
}
使用此类,您可以进行全局搜索并替换一些正则表达式,例如
([\w\d]+)\.printStackTrace\(\);
并将其替换为
LoggingFactory.getLogger(this.getClass()).error($1);
执行此操作时,请确保您仔细查看弹出窗口提供的选项并选中正则表达式复选框!
结果会是这样的
e2.printStackTrace();
变为 LoggingFactory.getLogger(this.getClass()).error(e2);
现在这仍然会在静态方法已被替换的地方留下一些错误,但您可以返回并手动修复这些错误。
编辑
我在这里感觉有点傻,但在再次查看这个问题后我意识到大多数日志记录 API 已经建立在工厂设计之上。上面的答案仍然有效,如果您使用自定义记录器或者如果他们获取/创建记录器的方法不足以进行正则表达式替换,则可能会使您受益。
因此,如果您使用的是 log4j,则可以简单地替换此正则表达式而不使用 LoggingFactory
:
org.apache.log4j.Logger.getLogger(this.getClass()).error($1);
关于java - 解析 Java 类以进行替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25753525/