介绍

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

在日志中搜索时间间隔相关推荐

  1. 日志间隔_在日志中搜索时间间隔

    日志间隔 介绍 这篇文章与我有关日志分析的迷你系列文章间接相关. 最好阅读两个主要部分,以更好地理解我在说什么. 第1 部分 , 第2部分 . 这篇文章描述了我在实现IDE方法时遇到的一个重要问题. ...

  2. linux 日志中搜索,linux中的搜索总结,通常用户搜索log文件

    1.查看ip  : /sbin/ifconfig 2.zgrep 客服节注册非法操作ip pafa.log20140804 3.查看某个某个字符总数 cat file(文件名)|grep -c &qu ...

  3. Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置

    Linux,grep命令,在大日志文件中搜索关键字 最后/最开始出现位置 grep [选项]... PATTERN [FILE]... grep -C N,(N代表一个整数)是搜索关键字出现位置,并且 ...

  4. 详解Liunx中less命令:查看日志,搜索关键字

    在less查看命令中最常用的功能是查看日志,可以直接用less xxx.log查看日志 打开方式:less +100g xxx.log --打开日志定位到100行的位置 less +100P xxx. ...

  5. 安全事件日志中的登录事件

    windows日志ID 表 1:安全事件日志中的登录事件 事件 ID 说明 528 用户成功登录计算机. 529 用户使用系统未知的用户名登录,或已知用户使用错误的密码登录. 530 用户帐户在许可的 ...

  6. mysql 错误等级_Mysql5.7 的错误日志中最常见的note级别日志解释

    在使用mysql5.7的时候,发现了不少在mysql5.6上不曾见过的日志,级别为note, 作者梳理了一下,最常见的note日志以下三种,下面我们来逐个解释. 第一种,Aborted connect ...

  7. mysql note级别_Mysql5.7 的错误日志中最常见的note级别日志解释

    在使用mysql5.7的时候,发现了不少在mysql5.6上不曾见过的日志,级别为note, 最常见的note日志以下三种,下面我们来逐个解释. 第一种,Aborted connection . 如上 ...

  8. 关注LoadRunner脚本回放日志中的Warning信息

    最近在与大家的讨论中发现了LoadRunner的很多问题,出于解决问题的出发点,我也就相关自己不理解的问题在Google中搜索了一番,并通过一些实例也去实际操作了一遍,发现很多问题确实并不是那么难解决 ...

  9. 使用awk 统计分析游戏后台日志中的数据

    awk是Unix/Linux环境下一种非常好的语言,适合于文本处理和报表生成,它还有许多精心设计的特性,允许进行特殊技巧程序设计.对于从游戏日志中抽取一些特定的信息,使用awk就非常方便.鉴于在测试工 ...

最新文章

  1. 用stringstream可以用指定字符分割字符串
  2. numpy维度交换_15年!NumPy论文终出炉,还登上了Nature
  3. mysql数据库写入数据的语法_mysql数据库插入数据语法
  4. C# WinForm 文件上传下载
  5. ubuntu workbench
  6. vivo面试经验4(linux基本操作,最基本,必须得会!!)
  7. 如何构建NTP时间服务器
  8. linux 进程 异常日志,linux后台启动程序,处理nohup日志太大的问题
  9. Spark Dataset 入门详解
  10. kernel——make menuconfig的实现原理【转】
  11. wifi共享大师电脑版_【小度wifi驱动下载】小度wifi驱动win10官方下载 v3.1 电脑版...
  12. ai人工智能_毕竟人工智能可能不适合您
  13. 物理学报 LaTeX模板(自编)
  14. 基于Java毕业设计中学后勤设备保修维护管理系统源码+系统+mysql+lw文档+部署软件
  15. 日期格式化java_JAVA格式化时间日期
  16. 用c语言做一个栈,完成逆波兰表达式
  17. flux_屏幕色温调控
  18. 数字拼音翻译成阿拉伯数字
  19. 使用MATLAB的residue()命令求传递函数的展开式
  20. Tensorflow 自然语言处理

热门文章

  1. 【贪心】奶酪厂(jzoj 1285)
  2. [XSY4170] 妹子(线段树上二分)
  3. 数据结构(四)之单链表查找中间结点
  4. 你不知道ADo.Net中操作数据库的步骤【超详细整理】
  5. 银行营业网点管理系统——implt包(CityAreaDaoImpl )
  6. SpringBoot整合Shiro实现登录认证和授权CHCache
  7. JS中闭包的应用自定义JS模块
  8. 双向链表的(CRUD)
  9. stream进行分组统计
  10. spring data jpa是什么?