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

示例代码

        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.mzph.cn/news/885966.shtml

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

相关文章

【JS学习】15. JS进阶-深浅拷贝等

JavaScript 进阶 - 第4天 深浅拷贝 浅拷贝 首先浅拷贝和深拷贝只针对引用类型 浅拷贝&#xff1a;拷贝的是地址 常见方法&#xff1a; 拷贝对象&#xff1a;Object.assgin() / 展开运算符 {…obj} 拷贝对象拷贝数组&#xff1a;Array.prototype.concat() 或者 […arr] 如…

人工智能导论-选择题

选择题&#xff1a; 1. 下列关于智能说法错误的是&#xff08;D&#xff09; 解释&#xff1a; A选项提到“任何生命都拥有智能”&#xff0c;这是一个广义的定义&#xff0c;从某种程度上说&#xff0c;即使是细菌等微生物也有其适应环境的方式&#xff0c;可以视为一种简单…

WebSocket和HTTP协议的性能比较与选择

WebSocket和HTTP协议的性能比较与选择 引言&#xff1a; 在web应用开发中&#xff0c;无论是实时聊天应用、多人在线游戏还是实时数据传输&#xff0c;网络连接的稳定性和传输效率都是关键要素之一。目前&#xff0c;WebSocket和HTTP是两种常用的网络传输协议&#xff0c;它们…

Prompt Engineering 提示工程

一、什么是提示工程&#xff08;Prompt Engineering&#xff09; Prompt 就是发给大模型的指令&#xff0c;比如讲个笑话、用 Python 编个贪吃蛇游戏等&#xff1b;大模型只接受一种输入&#xff0c;那就是 prompt。本质上&#xff0c;所有大模型相关的工程工作&#xff0c;都是…

QMetaObject::invokeMethod和QObject的信号槽机制比较

QMetaObject::invokeMethod 和 QObject 的信号槽机制虽然都涉及到了动态调用对象的方法,但它们在实现和使用上有一些重要的区别。下面详细解释这两者的异同。 1. 信号槽机制 定义 信号槽机制是 Qt 框架中的一种通信机制,用于在对象之间传递消息。信号槽机制的核心思想是将…

智慧水利综合解决方案

1. 引言 智慧水利综合解决方案集成了先进的信息技术与水利专业知识&#xff0c;旨在提升水资源管理与防洪减灾能力&#xff0c;实现水利管理的智能化与高效化。 2. 数字孪生技术 方案利用数字孪生技术构建流域数字模型&#xff0c;通过高精度模拟仿真&#xff0c;为水资源调度…

JSX 是react 专有的吗

JSX 并不是 React 专有的&#xff0c;尽管它最常用于 React。JSX&#xff08;JavaScript XML&#xff09;是一种 JavaScript 的语法扩展&#xff0c;允许在 JavaScript 中使用类似 HTML 的标签结构&#xff0c;便于描述用户界面。React 采用 JSX 来让开发者更加直观地定义组件的…

网络安全工程师要考什么证书

在当今数字化时代&#xff0c;网络安全已成为各行各业不可忽视的重要领域。随着网络攻击手段的不断升级&#xff0c;企业对网络安全人才的需求也日益迫切。网络安全工程师作为这一领域的专业人才&#xff0c;承担着保护企业信息安全、防范网络威胁的重要职责。那么&#xff0c;…

java xml 文本解析

示例文本 <Message><MessageName>time_request</MessageName><Timestamp>20220217165432906359</Timestamp><Body><EQPID>CMMAB01-DTP01</EQPID></Body> </Message>示例代码 import org.w3c.dom.Document; impo…

Python在数据科学中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Python在数据科学中的应用 Python在数据科学中的应用 Python在数据科学中的应用 引言 Python 概述 定义与特点 发展历程 Python…

机器学习:决策树——ID3算法、C4.5算法、CART算法

决策树是一种常用于分类和回归问题的机器学习模型。它通过一系列的“决策”来对数据进行分类或预测。在决策树中&#xff0c;每个内部节点表示一个特征的测试&#xff0c;每个分支代表特征测试的结果&#xff0c;而每个叶节点则表示分类结果或回归值。 决策树工作原理 根节点&…

2024-11-12 问AI: [AI面试题] 您将如何设计一个人工智能系统来预测电信公司的客户流失?

文心一言 设计一个人工智能系统来预测电信公司的客户流失&#xff0c;是一个复杂但至关重要的任务&#xff0c;它涉及到多个步骤和关键要素。以下是一个详细的设计方案&#xff1a; 一、明确需求和目标 在设计智能系统之前&#xff0c;需要明确系统的需求和目标&#xff0c;…

大数据-221 离线数仓 - 数仓 数据集市 建模方法 数仓分层 ODS DW ADS

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

odoo-040 odoo17前端的js方法调用后端py方法action报错

文章目录 问题描述梳理写法xml写法前端方法后端action的写法 错误解释 问题描述 在前端的kanban视图上添加了几个自定义按钮&#xff0c;按钮点击可以跳转到对应的tree视图&#xff0c;在写按钮调用方法的时候报错如下&#xff1a; 前端调用后端action报错&#xff1a; actio…

网络百问百答(一)

什么是链接&#xff1f; 链接是指两个设备之间的连接&#xff0c;它包括用于一个设备能够与另一个设备通信的电缆类型和协议。OSI参考模型的层次是什么&#xff1f; 有7个OSI层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层…

Vector Optimization – Stride

文章目录 Vector优化 – stride跳跃Vector优化 – stride跳跃 This distance between memory locations that separates the elements to be gathered into a single register is called the stride. A stride of one unit is called a unit-stride. This is equivalent to se…

Leetcode 每日一题 28.找出字符串中第一个匹配的下标

问题描述 给定两个字符串 haystack 和 needle&#xff0c;我们需要在 haystack 中找出 needle 字符串的第一个匹配项的下标。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1。 暴力搜索算法 暴力搜索算法是一种简单直观的字符串匹配方法。它的基本思想是&#xf…

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…

C++20 概念与约束(2)—— 初识概念与约束

《C20 概念与约束&#xff08;1&#xff09;—— SFINAE》 ●《C20 概念与约束&#xff08;2&#xff09;—— 初识概念与约束》 《C20 概念与约束&#xff08;3&#xff09;—— 约束的进阶用法》 1、概念 C20 中引入新的编译期关键字 concept 用于创建概念。个人认为将其…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图&#xff0c;本机(服务器)存储的图片想要在浏览器上通过Url地址访问&#xff1a; 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…