【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();
        }
    }
}
相关推荐
扶风ff5 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
鱼宵5 分钟前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
Raas10020 分钟前
AI网关能做语义缓存吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·后端·spring
天空鸟_时光不老27 分钟前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
小蒜学长31 分钟前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
C++ 老炮儿的技术栈33 分钟前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
洋就在江州36 分钟前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
CEZ43 分钟前
JeeWMS 开源 WMS 全景导览:一套 Java 仓库管理系统从单据流到代码入口的阅读地图
java·开源
Nebula_g43 分钟前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈
令狐少侠20111 小时前
centos7 下,使用docker 部署IOT 调试平台,ThingsBoard 并完美启动
java·spring boot·iot