java 读取log日志文件关键信息

news2024/11/20 4:10:30

示例代码

        String logFilePath = "C:\\Users\\v2402001\\Downloads\\11111_  none  _PSV975S3666001_09-10-2024_05.33.02_PM.log";
        Map<String, Pattern> fieldPatterns = new HashMap<>();
        fieldPatterns.put("Devices Picked Input", Pattern.compile("Devices Picked Input:\\s*(\\d+)"));
        fieldPatterns.put("User ID", Pattern.compile("User ID:\\s*(\\w+)"));
        fieldPatterns.put("Log Generation Time", Pattern.compile("Date Logged:\\s*(\\S+)"));
          Map<String, String> result = new HashMap<>();
        try {
            BufferedReader reader = new BufferedReader(new FileReader(logFilePath));
            String logContent = "";
            String line;
            while ((line = reader.readLine())!= null) {
                logContent += line + "\n";
            }
            reader.close();

            for (Map.Entry<String, Pattern> entry : fieldPatterns.entrySet()) {
                Pattern pattern = entry.getValue();
                Matcher matcher = pattern.matcher(logContent);
                if (matcher.find()) {
                    result.put(entry.getKey(), matcher.group(1));
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

以下是对上述代码进行解析整理后形成的技术文档内容:

1. 代码功能概述

这段Java代码的主要功能是从指定的日志文件中提取特定字段的值,并将这些值存储在一个Map中以便后续使用。它通过定义特定字段的正则表达式模式,在日志文件内容中进行匹配查找,从而获取相应字段的值。

2. 代码详细解析

2.1 变量定义
  • logFilePath
    • 类型:String
    • 作用:定义了要读取的日志文件的路径,示例路径为 "C:\\Users\\v2402001\\Downloads\\11111_ none _PSV975S3666001_09-10-2024_05.33.02_PM.log"。通过这个路径,代码能够找到并打开对应的日志文件进行读取操作。
  • fieldPatterns
    • 类型:Map<String, Pattern>
    • 作用:用于存储特定字段及其对应的正则表达式模式。通过put方法向这个Map中添加了三个键值对,分别是:
      • "Devices Picked Input",值为一个编译后的正则表达式模式 Pattern.compile("Devices Picked Input:\\s*(\\d+)"),用于匹配日志文件中 “Devices Picked Input” 字段后面跟着的数字内容。
      • "User ID",值为 Pattern.compile("User ID:\\s*(\\w+)"),用于匹配日志文件中 “User ID” 字段后面跟着的字母数字字符内容。
      • "Log Generation Time",值为 Pattern.compile("Date Logged:\\s*(\\S+)"),用于匹配日志文件中 “Date Logged” 字段后面跟着的非空白字符内容。
  • result
    • 类型:Map<String, String>
    • 作用:用于存储从日志文件中成功匹配并提取到的特定字段的值。在后续代码执行过程中,当在日志文件内容中找到与 fieldPatterns 中某个模式匹配的内容时,就会将对应的字段名作为键,匹配到的值作为值存入这个 Map 中。
2.2 读取日志文件内容
  • 使用 BufferedReader 来读取日志文件内容,具体步骤如下:
    • 创建 BufferedReader 对象:通过 new BufferedReader(new FileReader(logFilePath)) 创建一个 BufferedReader,它将从指定的 logFilePath 所指向的日志文件中读取内容。
    • 逐行读取并拼接内容:通过一个 while 循环,不断调用 reader.readLine() 方法读取日志文件中的每一行内容,并将每行内容拼接到 logContent 变量中,每行之间用换行符 "\n" 分隔。循环会一直执行,直到读取到文件末尾(即 reader.readLine() 返回 null)。
    • 关闭读取器:在读取完所有行后,通过 reader.close() 关闭 BufferedReader,释放相关资源。
2.3 提取特定字段的值
  • 遍历 fieldPatterns 中的每个键值对:通过 for (Map.Entry<String, Pattern> entry : fieldPatterns.entrySet()) 循环遍历 fieldPatterns 这个 Map 中的所有元素。在每次循环中,entry 变量代表一个键值对,其中 entry.getKey() 是特定字段名,entry.getValue() 是对应的正则表达式模式。
  • 进行模式匹配:对于每个字段对应的模式,使用 Matcher 进行匹配操作。具体步骤如下:
    • 创建 Matcher 对象:通过 Matcher matcher = pattern.matcher(logContent),创建一个 Matcher 对象,用于在拼接好的日志文件内容 logContent 中查找与当前模式 pattern(即 entry.getValue())匹配的内容。
    • 检查是否匹配成功:通过 matcher.find() 方法检查在日志文件内容中是否能找到与当前模式匹配的内容。如果找到匹配内容,则表示成功提取到了该字段的值。
    • 存储匹配结果:如果匹配成功,通过 result.put(entry.getKey(), matcher.group(1)) 将对应的字段名作为键,匹配到的值(通过 matcher.group(1) 获取匹配到的第一个分组内容,这里根据之前定义的正则表达式模式,分组内容就是我们要提取的字段值)作为值存入 result 这个 Map 中。
2.4 异常处理
  • 在整个代码执行过程中,如果在读取日志文件(通过 BufferedReader 读取)过程中出现 IOException(例如文件不存在、无法打开文件、读取权限问题等),代码会通过 catch (IOException e) 捕获该异常,并通过 e.printStackTrace() 打印出异常的堆栈跟踪信息,以便于调试和定位问题所在。

3. 代码总结

通过以上步骤,这段代码实现了从指定的日志文件中按照预定义的正则表达式模式提取特定字段的值,并将这些值存储在一个 Map 中。这种方式可以方便地对日志文件进行分析,获取关键信息用于后续的处理、统计或展示等操作。同时,通过合理的异常处理机制,能够在出现问题时提供一定的调试信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pytest-Bdd-Playwright 系列教程(10):配置功能文件路径 优化场景定义

Pytest-Bdd-Playwright 系列教程&#xff08;10&#xff09;&#xff1a;配置功能文件路径 & 优化场景定义 前言一、功能文件路径的配置1.1 全局设置功能文件路径1.2. 在场景中覆盖路径 二、避免重复输入功能文件名2.1 使用方法2.2 functools.partial 的背景 三、应用场景总…

HarmonyOs鸿蒙开发实战(17)=>沉浸式效果第二种方案一组件安全区方案

1.沉浸式效果的目的 开发应用沉浸式效果主要指通过调整状态栏、应用界面和导航条的显示效果来减少状态栏导航条等系统界面的突兀感&#xff0c;从而使用户获得最佳的UI体验。 2.组件安全区方案介绍 应用在默认情况下窗口背景绘制范围是全屏&#xff0c;但UI元素被限制在安全区内…

构建安全的数据库环境:群晖NAS安装MySQL和phpMyAdmin详细步骤

文章目录 前言1. 安装MySQL2. 安装phpMyAdmin3. 修改User表4. 本地测试连接MySQL5. 安装cpolar内网穿透6. 配置MySQL公网访问地址7. 配置MySQL固定公网地址8. 配置phpMyAdmin公网地址9. 配置phpmyadmin固定公网地址 前言 本文将详细讲解如何在群晖NAS上安装MySQL及其数据库管理…

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…

如何编译 Cesium 源码

如何编译 Cesium 源码 Cesium 是一个开源的 JavaScript 库&#xff0c;用于构建 3D 地球和地图应用程序。它提供了一套强大的 API 和工具&#xff0c;使开发者能够创建丰富的地理空间应用。本文将指导您如何从 GitHub 下载 Cesium 源码&#xff0c;并在本地进行编译。 TilesB…

实验5:网络设备发现、管理和维护

实验5&#xff1a;网络设备发现、管理和维护 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…

全志T113双核异构处理器的使用基于Tina Linux5.0——RTOS编译开发说明

3、RTOS编译开发说明 3.1、RTOS SDK与TinaLinux开发环境 RTOS SDK相关代码已集成到Tina Linux开发环境&#xff0c;Tina Linux开发环境下的rtos子目录即为RTOS开发环境。 ├──brandy ├──bsp ├──build ├──buildroot ├──build.sh >build/top_build.sh ├──…

汽车资讯新篇章:Spring Boot技术启航

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要&#xff1a;研究背景&…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、DMA基础知识 1、DMA简介 (1)DMA控制器 (2)DMA流 (3)DMA请求 (4)仲裁器 (5)DMA传输属性 2、源地址和目标地址 3、DMA传输模式 4、传输数据量的大小 5、数据宽度 6、地址指针递增 7、DMA工作模式 8、DMA流的优先级别 9、FIFO或直接模式 10、单次传输或突…

review-消息中间件MQ

RabbitMQ RabbitMQ&#xff0c;作为当今流行的开源消息代理软件&#xff0c;以其卓越的可靠性、灵活性和易用性在微服务架构和分布式系统中扮演着至关重要的角色。它不仅能够确保消息在不同系统组件间的高效传递&#xff0c;还能通过其高级消息队列协议&#xff08;AMQP&#x…

使用 .NET 创建新的 WPF 应用

本教程介绍如何使用 Visual Studio 创建新的 Windows Presentation Foundation &#xff08;WPF&#xff09; 应用。 使用 Visual Studio&#xff0c;可以向窗口添加控件以设计应用的 UI&#xff0c;并处理这些控件中的输入事件以与用户交互。 在本教程结束时&#xff0c;你有一…

【青牛科技】视频监控器应用

1、简介&#xff1a; 我司安防产品广泛应用在视频监控器上&#xff0c;产品具有性能优良&#xff0c;可 靠性高等特点。 2、图示&#xff1a; 实物图如下&#xff1a; 3、具体应用&#xff1a; 标题&#xff1a;视频监控器应用 简介&#xff1a;视频监控器工作原理是光&#x…

Android 项目依赖库无法找到的解决方案

目录 错误信息解析 解决方案 1. 检查依赖版本 2. 检查 Maven 仓库配置 3. 强制刷新 Gradle 缓存 4. 检查网络连接 5. 手动下载依赖 总结 相关推荐 最近&#xff0c;我在编译一个 Android 老项目时遇到了一个问题&#xff0c;错误信息显示无法找到 com.gyf.immersionba…

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;旨在设备之间进行通信&#xff0c;尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1&#xff1a; 优点&#xff…

2、 家庭网络发展现状

上一篇我们讲了了解家庭网络历史(https://blog.csdn.net/xld_hung/article/details/143639618?spm1001.2014.3001.5502),感兴趣的同学可以看对应的文章&#xff0c;本章我们主要讲家庭网络发展现状。 关于家庭网络发展现状&#xff0c;我们会从国内大户型和小户型的网络说起&…

element ui 走马灯一页展示多个数据实现

element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 element ui 走马灯一页展示多个数据实现 主要是对走马灯的数据的操作&#xff0c;先看js处理 let list [{ i: 1, name: 1 },{ i: 2, name: 2 },{ i: 3, name: 3 },{ i: 4, name: 4 },]let newL…

linux文件与重定向

目录 一、共识原理 二、回顾C语言文件函数 1.fopen 2.fwrite 3.fclose 三、文件系统调用 1.open 2.write 3.访问文件的本质 4.stdin&&stdout&&stderror 5.文件的引用计数 四、重定向 1.文件描述符的分配规则 2. 输出重定向 3.重定向系统调用 4.…

CS DAC的Matlab建模与电路设计

在模拟电路设计的复杂世界里&#xff0c;每一个细节都至关重要。Current Steering DAC作为模拟数字转换的核心组件&#xff0c;其设计和性能优化一直是工程师们追求的目标。 “什么是Current Steering DAC&#xff1f; CS DAC通过控制电流源的开关&#xff0c;将数字输入信号…

网络传输:网卡、IP、网关、子网掩码、MAC、ARP、路由器、NAT、交换机

目录 网卡IP网络地址主机地址子网子网掩码网关默认网关 MACARPARP抓包分析 路由器NATNAPT 交换机 网卡 网卡(Network Interface Card&#xff0c;简称NIC)&#xff0c;也称网络适配器。 OSI模型&#xff1a; 1、网卡工作在OSI模型的最后两层&#xff0c;物理层和数据链路层。物…