java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java日志文件关键词搜索

Java实现日志文件关键词搜索方式

作者:敲代码的猪猪侠

Java代码用于搜索指定目录下的日志文件,按时间排序并输出包含关键词的内容,处理大数据量时,控制台输出不完整,需调整IDE console设置以扩展缓冲区

Java日志文件关键词搜索

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代码实现了读取指定路径下的日志文件,并在日志文件中搜索指定的关键词。

具体实现过程如下:

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”结尾的日志文件,并从这些日志文件中查找包含指定关键词的日志,根据时间进行排序输出结果。

具体实现过程如下:

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

解决方案

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文