代码编织梦想

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class TryTraverseDemo03 {

    public static void main(String[] args) {

        // 设置要搜索的关键词
        String keyword = "TID:5bc8f75f1ad5450dab3127896bed429b.65.16849102400674853";

        // 日志文件路径
        String logFilePath = "D:\\log\\home\\xiahui-wms-rfbiz-application\\xiahui-wms-rfbiz-2023-05-24.2.log";

        File logFile = new File(logFilePath);

        try (BufferedReader br = new BufferedReader(new FileReader(logFile))) {
            String line;
            int lineNum = 1;
            while ((line = br.readLine()) != null) {
                if (line.contains(keyword)) { // 如果这一行包含关键词
                    System.out.printf("[%d]: %s%n", lineNum, line); // 输出这一行
                }
                lineNum++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

这段Java代码实现了读取指定路径下的日志文件,并在日志文件中搜索指定的关键词。具体实现过程如下:

1.指定要搜索的关键词和日志文件路径;
2.创建File对象,表示要读取的日志文件;
3.创建BufferedReader对象,指定字符流读取日志文件内容;
4.读取每一行的内容,如果该行包含关键词,则将该行内容输出到控制台;
5.继续读取下一行,直到读取到文件末尾;
6.关闭BufferedReader对象,释放资源。

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class LogSearcher {

    public static void main(String[] args) throws ParseException {
        String directoryPath = "D:\\log\\home\\xiahui-wms-rfbiz-application";
        File directory = new File(directoryPath);

        // 获取目录下所有的log文件路径
        List<String> logFilePaths = new ArrayList<>();
        for (File file : directory.listFiles()) {
            if (file.isFile() && file.getName().endsWith(".log")) {
                logFilePaths.add(file.getAbsolutePath());
            }
        }

        // 循环遍历每个日志文件进行查找
        List<String> targetLogs = new ArrayList<>();
        for (String logFilePath : logFilePaths) {
            try (BufferedReader reader = new BufferedReader(new FileReader(logFilePath))) {
                String line;
                while ((line = reader.readLine()) != null) {
                    if (line.contains("5bc8f75f1ad5450dab3127896bed429b.65.16849103054344859")) {
                        targetLogs.add(line);
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        // 对结果按时间排序
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Collections.sort(targetLogs, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                try {
                    Date d1 = dateFormat.parse(o1.substring(0, 19)); // 将字符串截取到时间部分,按格式解析成Date类型
                    Date d2 = dateFormat.parse(o2.substring(0, 19));
                    return d1.compareTo(d2); // 用Date类型比较时间
                } catch (ParseException e) {
                    e.printStackTrace();
                    return 0;
                }
            }
        });

        // 显示查找的结果
        System.out.println("Found " + targetLogs.size() + " logs:");
        for (String log : targetLogs) {
            System.out.println(log);
        }
    }
}

这段Java代码实现了在指定目录下查找所有以“.log”结尾的日志文件,并从这些日志文件中查找包含指定关键词的日志,根据时间进行排序输出结果。具体实现过程如下:

1. 指定目录路径;
2. 创建File对象,表示要查找的目录;
3. 获取目录下所有以“.log”为后缀的文件路径;
4. 遍历每个日志文件,打开文件,按行读取内容,查找包含指定关键词的日志,并将其保存到targetLogs集合中;
5. 关闭文件读取流,释放资源。
6. 对找到的日志集合按时间进行排序,时间格式采用“yyyy-MM-dd HH:mm:ss”;
7. 输出找到日志的总数以及展示日志详情。

另外在使用该工具类的时候遇到一个问题,当根据某个关键字进行查询所对应的日志,当日志数据量大的时候,查询到的日志在控制台输出不完整的问题

解决方案:

通过Console配置修改来修改,点击 File ->Settings ->editor - >General->Console 选中如下图:

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_60805705/article/details/130869255

如何定位oom-爱代码爱编程

造成OOM的原因 定位OOM 针对第一和第二种情况需要定位OOM 系统已经挂了: 通过堆dump文件定位。 当JVM发生OOM时,自动生成DUMP文件: -XX:+HeapDumpOnOutOfMemoryError