日志间隔_在日志中搜索时间间隔
日志间隔
介绍
这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分,以更好地理解我在说什么。 第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 部分 , 第2部分 . 这篇文章描述了我在实现IDE方法时遇到的一个重要问题. 任务描述 ...
- golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践
在云原生时代和容器化浪潮中,容器的日志采集是一个看起来不起眼却又无法忽视的重要议题.对于容器日志采集我们常用的工具有filebeat和fluentd,两者对比各有优劣,相比基于ruby的fluentd ...
- mysql事务日志备份_事务日志备份 (SQL Server)
事务日志备份 (SQL Server)Transaction Log Backups (SQL Server) 01/05/2018 本文内容 适用于:Applies to: SQL ServerSQ ...
- mysql 事务日志备份_事务日志备份与恢复 5
14.5 用Bak文件恢复到故障点的奥秘 如果数据库被损坏,我们就只能利用备份集文件(通常扩展名为BAK)来恢复数据库,如果备份集中包含了尾日志备份,我们同样能将数据库恢复到故障点. 前面我们已经介绍 ...
- log4j2 无日志记录_在Log4j2中更好地执行非日志记录器调用
log4j2 无日志记录 使用Log4j 1.x并希望避免在某些情况下可能会造成额外的性能影响(即使实际上未记录该消息)时,通常使用日志记录防护 . Java的简单日志记录外观 ( SLF4J )带给 ...
- cx_oracle写日志信息_看日志痛苦——可能是你方法不对
看日志,是研发的日常工作,相信你已经从各种报错日志中查出许多BUG,但也被冗长.复杂的日志困扰过无数次. 在日常工作中,我也经常痛苦于看日志,一般是这些日志长得面目狰狞: 日志文件太大,打开都很困难 ...
- python3--htmltestrunner 日志显示_实时日志:Serverless Python 运行时支持日志实时输出...
开发前言 作为一名 Serverless 架构的重度使用者,我一直对调试感到恐慌:经常在测试接口的时候,会通过网页/PostMan 触发函数,然后没得到预期的结果,我就只能傻乎乎的一直点控制台的日志, ...
- java操作日志记录_通用日志记录(java)
/*** 统一日志处理Handler *@authorMingchenchen **/ public classLogAopHandler { @AutowiredprivateAuditLogDao ...
- mysql 二进制日志查看_使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)...
前提 MySQL开启了binlog日志 操作 1. 查看MySQL是否开启binlog(进mysql操作) mysql> show variables like 'log_bin%'; 2. 查 ...
最新文章
- FPGA中LVDS差分高速传输的实现
- 连夜撸了一个简易聊天室
- 【IOC 控制反转】Android 事件依赖注入 ( 事件三要素 | 修饰注解的注解 | 事件依赖注入步骤 )
- android 监听布局改变,Android通过监听最外层布局的改变监听键盘的状态,软键盘的弹出和收起都会改变外层布局(前提是把Activity的mode设置成压缩);...
- jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper
- LeetCode 785. 判断二分图(染色法)
- 【Python】pyinstaller安装失败的解决办法
- ajax和json的综合应用
- python中函数的参数_Python小知识-Python中的函数参数(基础篇)
- Spark内核解析之三:Spark 通讯架构
- 微信小程序云开发教程-后端接口分析和接口返回值的格式定义
- this installer requires you to restart your system to finish installing Microsoft VC
- 开通慢直播,RTMP协议和RTSP协议如何选择?
- 微博数据采集的10个经典方法
- JAVA基础案例教程——模拟物流快递系统程序设计
- android+5.1+root,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
- 设计模式之代理模式(第二篇)
- 阿里云Landing Zone系列--2 资源目录之--多账号
- “源”来是你-Vol.37 | 知名开源企业StreamNative 招募开源社区运营和开源布道师!...
- Oracle 11G 11.2.0.4 RAC部署参考指南
热门文章
- 牛客网 【每日一题】5月12日题目精讲 模拟战役
- P4542-[ZJOI2011]营救皮卡丘【费用流,Floyd】
- P5664-Emiya家今天的饭【dp】
- jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】
- P1368-工艺【最小表示法】
- 【博弈】取石子游戏(P2599)
- 【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)
- 【贪心】Stall Reservations(luogu 2859/poj 3190)
- 【拓扑排序】【DP】奖金(ssl 1325)
- MongoDB SpringBoot ObjectId序列化json为String