java - 从tomcat日志中提取sql查询

标签 java sql tomcat logging extract

我需要按照面向对象的设计模式开发一个 JAVA 应用程序,以便从 Tomcat 日志中提取 sql 查询。我有日志文件。我需要从该文件中提取 sql 查询。 我是这个领域的新手。我需要了解哪些基础知识才能做到这一点或提供一些好的引用资料。

因为我不能共享整个日志文件,所以我只共享其中的一部分:

(Dao.java:execute:73) 选择 ORDER_STATUS_TYPE_ID,来自 ORD.ORDER_STATUS_TYPE 的名称 [调试] [RMI TCP 连接 (5)-127.0.0.1 2018 年 2 月 5 日 15:00:10] (TraceInterceptor.java:writeToLog:26) []离开 TypeDaoImpl.getOrderStatusType(): 1062ms: [com.xyz.abc. api.is.model.type.OrderStatusType@2ac9ecc3,com.xyz.abc.api.is.model.type.OrderStatusType@76777395,com.xyz.abc.api.is.model.type.OrderStatusType@6ad8ddb7,com。 xyz.abc.api.is.model.type.OrderStatusType@6738868f, com.xyz.abc.api.is.model.type.OrderStatusType@272c15f,

最佳答案

假设您无法编辑 DAO.java,我将发布一个答案.如果你可以编辑DAO.java介绍一些字符,例如 ||<<标记打印查询的开始和结束。这样您就不会列出所有 SQL 命令的详尽列表。

public static void main(String[] args) throws IOException {
        long start = System.currentTimeMillis();
        FileInputStream inputStream = null;
        Scanner sc = null;
        try {
            inputStream = new FileInputStream("C:\\Users\\absin\\Desktop\\catalina.out");
            sc = new Scanner(inputStream, "UTF-8");
            while (sc.hasNextLine()) {
                String line = sc.nextLine();
                if (line.toLowerCase().contains("select ") || line.toLowerCase().contains("insert ")
                        || line.toLowerCase().contains("update ")) {
                    // DO something with the found log entry
                    System.out.println(line);
                }
            }
            // note that Scanner suppresses exceptions
            if (sc.ioException() != null) {
                throw sc.ioException();
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (sc != null) {
                sc.close();
            }
        }
        System.out.println("Time taken : " + (System.currentTimeMillis() - start) + " milliseconds");
    }

它会打印很多带有查询的日志行,在一个 40 MB 的日志文件上大约需要 12 秒。如果您熟悉正则表达式,也可以使用它们。

关于java - 从tomcat日志中提取sql查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48636681/

相关文章:

java - 有效用户的 Tomcat 安全约束

ArrayList 中可能匹配项的 Java 迭代

java - 使用Java从Map中的MySQL表中检索百万条记录

sql - 有没有办法在 PostgreSQL 语句中设置一个可以在文件路径名中使用的变量

sql - 如何避免N+1查询

eclipse - 在 Eclipse Indigo 中设置外部输出文件夹

java.lang.NoSuchMethodError : org. jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object - Tomcat 8

java - WSDL 使用 - 使用什么工具?

java - 测试后运行 Dataprovider

java - 为什么添加方法不接受我的输入?