【Java工具类】Java提取最新错误日志(附 AI 对接思路)

前言

在日常开发和维护中,我们经常需要快速查看服务器最新生成的日志文件,并从中筛选出关键的 ERROR 错误信息。虽然市面上有 ELK、Splunk 等大型日志分析平台,但在一些轻量级场景或临时排查中,编写一个简单直接的 Java 工具类往往更加高效。

一、核心功能设计

我们的目标工具需要具备以下能力:

  1. 自动遍历指定目录。

  2. 锁定最后修改时间最新的那个 .log 文件。

  3. 逐行读取,筛选出包含 ERROR 的行。

  4. 预留了调用 AI 大模型 分析错误并输出解决方案的接口。

二、应用场景

  1. 快速排查: 当服务报错时,无需登录服务器使用 grep 命令,直接运行此工具类即可定位最新错误。

  2. 自动化巡检脚本:结合 Crontab 或 Spring Schedule,每分钟运行一次,自动发现新产生的 ERROR 日志。

  3. AI 辅助运维 Demo:作为引入大模型进行智能运维(AIOps)的最小可行性产品(MVP),验证"错误日志自动分析"的流程。

三、代码实现详解

java 复制代码
package org.jeecg.modules.utils;

import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;
import java.util.Optional;
import java.util.stream.Stream;

@Slf4j
public class ServiceLogUtil {

    private static final String directoryPath = "文件目录地址";// 文件目录地址
    private static final String fileSuffix = ".log";// 文件后缀

    public static void main(String[] args) {

        // 1.获取目录下所有文件
        try (Stream<Path> paths = Files.walk(Paths.get(directoryPath))) {
            // 2.过滤出 .log 普通文件,并找出最新修改的
            Optional<Path> latestLogFile = paths
                    .filter(Files::isRegularFile)
                    .filter(p -> p.toString().endsWith(fileSuffix))
                    .max(Comparator.comparingLong(p -> p.toFile().lastModified()));
            // 3.如果存在最新文件,则处理
            latestLogFile.ifPresent(p -> {
                // 4.读取文件行
                try (Stream<String> lines = Files.lines(p)) {
                    // 5.遍历行,筛选出 ERROR 行并打印
                    lines.forEach(line -> {
                        if (line != null && line.contains("ERROR")) {
                            // 6.打印错误行
                            System.out.println(line);
                            // 7.调用AI大模型,将错误行发送给AI大模型
                            String json = "解决方案:XXXXXXX," + line;
                            // 8.将AI大模型的回复发送给相关人员
                            log.error(json);
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
相关推荐
写代码写到手抽筋11 分钟前
5G上行DCI字段判定:端口 流数 PMI选择详解
java·算法·5g
xieliyu.22 分钟前
Java算法精讲:双指针(二)
java·开发语言·算法
jeffer_liu1 小时前
Spring AI 生产级实战:裁判员
java·人工智能·后端·spring·大模型
小bo波2 小时前
枚举实战
java·设计模式·枚举·后端开发·代码重构
夜微凉42 小时前
三、Spring
java·后端·spring
橘右今2 小时前
2026 Java后端高频面试宝典
java·开发语言·面试
xyzzklk3 小时前
解决Salesforce无法向外发送邮件
android·java·开发语言·网络·crm·salesforce·客户关系管理
biubiubiu07063 小时前
SpringBoot关于外部化配置
java·spring boot·spring
zzz_23684 小时前
【Spring】面试突击系列(二):SpringBoot 入门与自动配置原理
java·spring boot·spring
Full Stack Developme4 小时前
Spring AOP 与 AspectJ
java·后端·spring