在日志中搜索时间间隔

介绍

这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分,以更好地理解我在说什么。 第1 部分 , 第2部分 。

这篇文章描述了我在实现IDE方法时遇到的一个重要问题。

任务描述

当某人使用日志时,通常只需要调查一个时间间隔。 可用日志通常跨越几天,但是必须调查的时间间隔是1-2小时。 任务是选择该时间间隔内的所有日志记录。

基本日志记录正则表达式

为了选择日志记录,我们需要一个与任何日志记录匹配的正则表达式。 对于简单的log4j格式,例如

2018-08-10 11:00:56,234 DEBUG [Thread-1] package1.pkg2.Class1 Text Message

我发现以下正则表达式:

TIME_REGEX((?!(TIME_REGEX)).*\r?\n)*

此正则表达式匹配单行和多行日志记录。 时间正则表达式可能是

\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d,\d\d\d

因此,如果有人想将所有日志加载到文本窗口中,则可以一个一个地打开日志文件,并使用带有此正则表达式的Matcher.find()来获取所有日志记录。

此正则表达式基于以下事实:时间正则表达式模式永远不会在日志消息的正文中重复,这在所有情况下的99%中都是正确的。

日志记录的日期时间

为了搜索特定时间间隔并使用其他功能,有必要从日志记录中提取dtaetime信息。 幸运的是,JDK已使用DateTimeFormatter解决了该任务。 指定日志类型的格式就足够了,可以提取日期。 例如,对于上面的日志记录,格式为

yyyy-MM-dd HH:mm:ss,SSS

一旦我们可以提取日期时间信息,就可以将间隔指定为日期时间值,而不是某些特定格式的字符串。

搜索时间

现在,我们找到了一种选择任何日志记录并从中提取日期信息的方法,前进的道路似乎很明确:

  • 指定间隔,
  • 一一选择记录
  • 从日志记录中提取日期信息
  • 比较日期时间和间隔
  • 如果日期时间在间隔内,则将此记录添加到找到的记录列表中
  • 搜索所有文件后,显示找到的记录

这种方法存在一个大问题:
时间 。 对于每个50 MB的50个日志文件,将需要花费数小时来扫描所有日志文件,以找到间隔中的10 MB记录。

我们可以使用一种技巧来过滤掉间隔中不包含单个记录的文件。 我们使用以下事实:日志文件中的日志记录是一个接一个地写入的。 这意味着下一条记录的时间等于或晚于该记录的时间。 例如,只有两种情况是可能的:

2018-08-10 11:00:56,234 DEBUG [Thread-1] package1.pkg2.Class1 Text Message
2018-08-10 11:00:56,234 DEBUG [Thread-1] package1.pkg2.Class1 Msg 2

要么

2018-08-10 11:00:56,234 DEBUG [Thread-1] package1.pkg2.Class1 Text Message
2018-08-10 11:00:56,278 DEBUG [Thread-1] package1.pkg2.Class1 Msg 2

我很少看到一些示例,这些示例在高负载下日志记录可以反向显示,但差值以毫秒为单位。 对于我们的目的,我们可以认为这种差异微不足道。

这意味着,如果文件中的第一个记录和最后一个记录都不不在间隔中,则文件中的所有记录都不在间隔中,并且可以将该文件过滤掉。 Java正则表达式具有特殊的结构来查找第一条和最后一条记录。

第一条记录:

\A TIME_REGEX((?!(TIME_REGEX)).*\r?\n)*

最后一条记录:

TIME_REGEX((?!(TIME_REGEX)).*\r?\n)*\Z 

\ A表示文本的开头,\ Z表示文本的结尾。 您可以在javadocs.java.util.regex.Pattern中找到更多详细信息。

解决方案是使用特殊的预扫描技术。 在扫描日志文件的全文之前,请找到第一条和最后一条记录,如果不在间隔中,请跳过该文件。 在50个文件中,可能需要扫描1-2个文件。

结论

REAL使用此技术来加快对日期时间间隔的搜索。 我发现大约需要5到10秒钟来决定是否必须跳过该文件。 大多数情况下,如果花费最后一条记录执行Matcher.find()。 发现第一条记录要快得多。 我认为可以通过选择50 MB文件中的最后5 MB来搜索最后一条记录来进一步加快速度。 但是即使在当前状态下它也足够快。

翻译自: https://www.javacodegeeks.com/2018/11/search-time-interval-logs.html

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

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

相关文章

【渝粤题库】广东开放大学 民事诉讼法 形成性考核

选择题 题目:人民法院认定公民无行为能力的判决作出以后,该公民经过治疗,病情得到好转,逐渐又恢复了民事行为能力。对此种情况,人民法院根据利害关系人的申请,应当如何处理?( &#…

mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集

$connmysql_connect("localhost","root","123456");mysql_select_db("db_bcty365",$conn);mysql_query("set names gb2312");?>其中:SET NAMES ‘x‘语句与这三个语句等价:mysql> SET charact…

【渝粤题库】广东开放大学 系统工程 形成性考核

​👉关注我,看答案👈 选择题 题目:自组织是( )因素相互作用的结果,是复杂系统追求的目标。 题目:系统科学体系中,应当区分基础科学与技术科学。例如,基础科学包括运筹学、信息论、控制论等。 题…

【渝粤题库】广东开放大学 计算机网络 形成性考核

选择题 题目:随着微型计算机的广泛应用,大量的微型计算机是通过局域网连入广域网,而局域网域广域网的互连是通过 实现的。 题目:网络是分布在不同地理位置的多个独立的 的集合。 题目:在OSI参考模型中,在网…

php加mySQL制作网络硬盘_PHP实现的简单网络硬盘

/p>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">disk online.font {font-family: Consolas;color: #369;font-size: 12px;}.box {font-family: Consolas;font-size: 13px;color: #369;border: 1px solid #000;}.btn {font-family: "微软雅…

vue调用手机相机相册_详解Vue调用手机相机和相册以及上传

组件选中{{imgList.length}}张文件,共{{bytesToSize(this.size)}}javaScript代码export default {name: "cameras-and-albums",data(){return{imgList: [],datas: new FormData(),files:0,size:0}},methods:{//调用相册&相机fileClick() {$(#upload_f…

在mysql中删除表中字段_MySQL中的表中增加删除字段

1.增加一个字段alter table user表 add COLUMN new1字段 VARCHAR(20) NOT NULL DEFAULT 0; //增加一个字段,VARCHERA 20 , 不为空,默认值是 0//增加多个alter table user表add COLUMN new1字段 VARCHAR(20) NOT NULL DEFAULT 0,add COLUMN new2字段 VARCHAR(20) NOT NULL…

红旗linux mysql_恢复 - 红旗Linux案例精选:Amanda集中备份实例详细讲解_数据库技术_Linux公社-Linux系统门户网站...

五、恢复假定我们需要恢复cp3上一些丢失的数据,首先用amandabackup帐号登录cp2机器,创建/etc/amanda/amanda-client.conf文件,内容如下:## amanda.conf - sample Amanda client configuration file.## This file normally goes in…

python 语音识别机器人控制系统_python实现百度语音识别api

本文实例为大家分享了python实现百度语音识别的具体代码,供大家参考,具体内容如下详细百度语音识别api文档先下载python用SDK,可以用python setup.py install安装 # 引入Speech SDKfrom aip import AipSpeech# 定义常量APP_ID 你的 App IDAP…

linuxpip安装python包_Windows+Linux安装Python包管理工具pip

WindowsLinux安装Python包管理工具pipWindows安装Python包管理工具pippip是一个Python包管理工具,主要是用于安装PyPI上的软件包,可以替代easy_install工具。一、前期准备首先确认windows机器上面是否已经安装好了python。在cmd中输入python --version和…

mysql 深胡_Mysql胡说八道

mysql索引今天看了一些关于MySQL相关的东西,来做一些碎碎念,写这些可能只是觉得自己看东西老爱忘23333.先来看一组MySQL数据,如图我们要查看最后id11的数据,如果我们不加索引的话会怎样呢?他会一条一条的比对&#xff…

python3.1.1_python 3.1.1 with--enable shared:将不会构建任何扩展

摘要:使用--enable shared在RHEL 5.3 64位上构建Python3.1无法编译所有扩展。建筑“正常”工作良好,没有任何问题。请注意这个问题似乎模糊了编程和系统管理之间的界限。但是,我相信因为它必须直接处理操作系统问题和编程问题,所以我会在stackoverflow和serverfault上交叉发布它…

java的case_java中的switch case语句使用详解

java中的switch case语句switch-case语句格式如下:switch(变量){case 变量值1://;break;case 变量值2://...;break;...case default://...;break;}swtich()变量类型只能是int、short、char、byte和enum类型(JDK 1.7 之后,类型也可以是String了)。当进行c…

java public main_实例分析Java中public static void main(String args[])是什么意思

本文实例讲述了Java中public static void main(String args[])的来龙去脉。分享给大家供大家参考,具体如下:public static void main(String[] args)这绝对不是凭空想出来的,也不是没有道理的死规定,而是java程序执行的需要。jvm在…

打印矩阵 java_【Java】 剑指offer(29) 顺时针打印矩阵

本文参考自《剑指offer》一书,代码采用Java语言。题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。思路每次打印矩阵最外面的一圈(用方法printMatrixInCircle()表示),每次都是这个操作,所以可以采用递归。每次…

具有JDK 12精简数字格式的自定义精简数字模式

帖子“ 紧凑数字格式到JDK 12 ”已经成为java subreddit线程上讨论的主题 。 在那个线程中表达的与紧凑数字格式表示有关的问题涉及显示的精度数字和显示的紧凑数字模式。 可以通过使用CompactNumberFormat.setMinimumFractionDigits(int)来解决精度数字问题,该方法…

【渝粤题库】陕西师范大学100071教育学作业(高起本)

单选题 1、中小学为实现教育目标,与课堂教学相配合,在课堂教学以外对学生身心实施多种影响的正规教育活动,就是( ) A、课堂作业 B、课外作业 C课外活动 D、课外参观 2、学生的行为规范、公民意识、劳动态度等属于( ) A、心理素质 B、生理素质…

java 面试for循环_一个基础的for循环面试题

下面的这段程序主要考察的就是for循环的基础,输出什么??????1、 public class test {2、3、 /**4、 * param args5、 */6、 public static void main(String[] args) {7、 // TODO Auto-generat…

java浏览文件夹_一个用java实现简单的文件浏览器

[java]代码库import java.awt.*;import java.awt.event.*;import java.net.URL;import javax.swing.*;//文件浏览器public class HTTPBrowserDemo extends JFrame {private static final long serialVersionUID -5794029080886644211L;JTextField jtfAddress; // 输入文件地址…

【渝粤题库】陕西师范大学151203 初级会计学作业(笔试题型)

《初级会计学》作业 一、单项选择 1.下列会计要素,属于静态要素的有 ( ) A.负债 B.收入 C.费用 D.利润 2. 下列项目中,属于流动负债的有 ( &#…