java - 解析 Java 类以进行替换

标签 java eclipse parsing

我必须更换所有关闭的 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/

相关文章:

java - java中如何将一个类中创建的对象传递给另一个类?

java - 正则表达式模式匹配

java - Eclipse 命令的键绑定(bind)

jquery - 为什么需要JSON解析?

parsing - 单词 "lexer"是单词 "parser"的同义词吗?

java - 如何调试未按预期工作的 switch 语句?

java - Spring 启动: how can I validate a multipart form in springboot

java - 将 SWT 依赖项添加到 POM

java - 使用 PDFBox 解析器从 PDF 中提取嵌入式 flash 文件的最佳方法是什么?

parsing - 识别文本文件中模式的软件