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

 更新时间:2025年09月19日 10:37:46   作者:敲代码的猪猪侠  
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代码实现了读取指定路径下的日志文件,并在日志文件中搜索指定的关键词。

具体实现过程如下:

  • 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 选中如下图:

总结

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

相关文章

  • Java基于ServletContextListener实现UDP监听

    Java基于ServletContextListener实现UDP监听

    这篇文章主要介绍了Java基于ServletContextListener实现UDP监听,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    这篇文章主要介绍了JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • SpringBoot项目创建单元测试的流程步骤

    SpringBoot项目创建单元测试的流程步骤

    在日常开发的过程中,对自己的代码进行单元测试是个非常重要的过程,一方面可以最小范围的针对一个方法进行测试,提高测试的简便性以及测试的成本,本篇文章主要是为了总结一下如何优雅的在Springboot项目中使用单元测试去测试功能,需要的朋友可以参考下
    2024-11-11
  • 如何基于SpringMVC实现断点续传(HTTP)

    如何基于SpringMVC实现断点续传(HTTP)

    这篇文章主要介绍了如何基于SpringMVC实现断点续传(HTTP),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Java ArrayList遍历修改代码实例解析

    Java ArrayList遍历修改代码实例解析

    这篇文章主要介绍了Java ArrayList遍历修改代码实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • SpringMVC KindEditor在线编辑器之文件上传代码实例

    SpringMVC KindEditor在线编辑器之文件上传代码实例

    这篇文章主要介绍了SpringMVC KindEditor在线编辑器之文件上传代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • SpringBoot应用的打包和发布实现

    SpringBoot应用的打包和发布实现

    本文主要介绍了SpringBoot应用的打包和发布实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • SpringBoot中邮件任务的使用

    SpringBoot中邮件任务的使用

    这篇文章主要介绍了SpringBoot中邮件任务的使用,SpringBoot 邮件任务是指使用SpringBoot框架来实现邮件发送和接收的功能,通过SpringBoot的自动配置和简化的开发流程,我们可以轻松地集成邮件功能到我们的应用程序中,需要的朋友可以参考下
    2023-10-10
  • SpringBoot实现定时任务动态管理示例

    SpringBoot实现定时任务动态管理示例

    这篇文章主要为大家介绍了SpringBoot实现定时任务动态管理示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Java简易抽奖系统小项目

    Java简易抽奖系统小项目

    这篇文章主要为大家详细介绍了Java简易抽奖系统小项目,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论