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,一经查实,立即删除!

相关文章

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;都是…

智慧水利综合解决方案

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

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

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

Python在数据科学中的应用

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

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

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

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

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

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…

Python技巧:查询模块的版本号的方法

1,pycharm里面的 Python interpreter 或者 Python package 2&#xff0c;通过 __version_info__ import matplotlib print(matplotlib.__version_info__) 3&#xff0c;查看目录里面的 _version.py 文件

计算机网络——HTTP篇

基础篇 IOS七层网络模型 TCP/IP四层模型&#xff1f; 应⽤层&#xff1a;位于传输层之上&#xff0c;主要提供两个终端设备上的应⽤程序之间的通信&#xff0c;它定义了信息交换的格式&#xff0c;消息会交给下⼀层传输层来传输。 传输层的主要任务就是负责向两台设备进程之间…

Unity插件NodeCanvas之行为树的详细教程

文章目录 前言叶节点 Leafs1、行为 Action2、判断 Condition控制组件 Composites1、顺序执行器 Sequencer2、选择执行器 Selector3、概率选择执行器 Probability Selector4、权重选择执行器 Priority Selector5、平行执行器 Parallel6、轮流选择器 Flip Selector7、完整执行器 …

Qt 使用QTreeView显示并动态的增删改查JSON文件数据

文章目录 效果图概述部分代码总结 效果图 概述 本案例在此开源项目QJsonModel的基础上实现&#xff0c;动态的生成并操作JSON数据&#xff0c;QJsonModel是一个基于QAbstractItemModel的JSON数据模型&#xff0c;它提供了一种简单的方式来将JSON数据可视化&#xff0c;功能简单…

计算机专业可以报考公务员吗?都有哪些职位?

C哥专业提供——计软考研院校选择分析专业课备考指南规划 计算机专业是历年来考公的热门专业&#xff0c;岗位较多&#xff0c;且研究生进入体制内直接是副科级待遇&#xff0c;铁饭碗还是很香的&#xff01; 25国考计算机专业可以选择的岗位 招聘人数&#xff1a;学硕>专硕…

视频智能分析平台LiteAIServer算法定制未戴安全帽检测技术:智能安防领域的新篇章

在当今这个科技日新月异的时代&#xff0c;人工智能&#xff08;AI&#xff09;和计算机视觉技术的飞速发展正在以前所未有的速度改变我们的生活、工作乃至整个社会的面貌。在建筑行业中&#xff0c;安全问题一直是重中之重&#xff0c;而工人未戴安全帽的问题更是工地安全管理…

C++ 优先算法 —— 四数之和(双指针)

目录 题目&#xff1a;四数之和 1. 题目解析 2. 算法原理 Ⅰ. 暴力枚举 Ⅱ. 双指针算法 不漏的处理&#xff1a; 去重处理&#xff1a; 3. 代码实现 Ⅰ. 暴力枚举 Ⅱ. 双指针算法 题目&#xff1a;四数之和 1. 题目解析 题目截图&#xff1a; 这道题与三数之和&am…

思考:linux Vi Vim 编辑器的简明原理,与快速用法之《 7 字真言 》@ “鱼爱返 说 温泉啊“ (**)

Linux vi/vim | 菜鸟教程 https://zhuanlan.zhihu.com/p/602675406 Linux Vim编辑器的基本使用_vim文本编辑器-CSDN博客 这里提出使用 vi / vim 进行简单的编辑操作的原因&#xff0c;主要是在容器镜像中&#xff0c;普遍都是使用这个。 在 linux 服务器应用场景&#x…

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

目录 一、前言 二、栈是排列方式 三、栈的单词 四、程序中的栈 五、栈的方法 1.声明并初始化栈 2.往栈里放东西&#xff08;学名&#xff1a;入栈&#xff09; 3.从栈往外拿东西 &#xff08;学名&#xff1a;出栈&#xff09; 4.清空栈 5.遍历 Stack 6.获取Stack的长…

React Query在现代前端开发中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 React Query在现代前端开发中的应用 引言 React Query …