【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();
        }
    }
}
相关推荐
永遠_3 小时前
YAML格式化工具
java
曼岛_4 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
一枕槐安4874 小时前
RAG 服务扛住高并发:缓存、队列、限流三件套
java·spring·缓存·异步任务·rag·断路器
Wang's Blog4 小时前
Java 项目实战: 交友项目 - 动态查询开工:昨日回顾与今日任务
java·python·交友
云和数据.ChenGuang4 小时前
光哥说Python 异常深度解析:从异常模型到工程化实践
java·前端·人工智能·python·langchain
SL_staff4 小时前
APS动态重排实践:在多品种小批量场景下实现5分钟插单响应
java·开源·产品
captain3765 小时前
Spring MVC(4)-响应
java·spring boot·后端
Lichee206 小时前
招行Java 面试知识点梳理:Spring 事务、锁、线程池、集合
java·面试
YDS8296 小时前
Small Spring IOC篇:作用域和FactoryBean
java·后端·spring
Shaoshing6 小时前
LeetCode100 42.接雨水
java·算法·leetcode