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

日志间隔

介绍

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

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

相关文章

如果在iTerm2中复制命令特别卡,就跟慢动作似的,怎么办?

如果在 iTerm2 中复制命令特别卡,就跟慢动作似的。你可以编辑 ~/.zshrc: vim ~/.zshrc增加如下内容: pasteinit() {OLD_SELF_INSERT${${(s.:.)widgets[self-insert]}[2,3]}zle -N self-insert url-quote-magic # I wonder if youd need .ur…

lambda表达式的使用

package com.asx.application.common.utils;import org.junit.Test;import java.util.Comparator; import java.util.function.Consumer;/*** lambda表达式的使用* 1.举例:(o1,o2) -> Integer.compare(o1,o2) ;* 2.格式* ->;lambda操作符 或 箭头操作符* ->…

centos桥接模式怎么联网_今日回收 | 互联网+废品回收模式是怎么兴起的呢?

随着社会的不断发展和进步,废品回收已不再是传统和低效的行业,而是我国现如今整合资源的重要手段。而该行业之所以能够有如此成就,只因其中98%的企业结合了互联网,成功实现了企业转型。据统计,我国目前废品回收的相关企…

文档 修订 非修订区别_修订和不变性

文档 修订 非修订区别这是一个简短的帖子。 我不确定如何启动它。 这是审阅一些现有代码时“为什么我没有想到这一刻”之一。 由于存在NDA,我无法共享实际代码。 它与处理修订有关。 我能与之联系最紧密的是WordPress(WP)如何处理博客文章和修…

终端界面如何改成彩色的

很多朋友说自己的终端一直是黑白的,如何改成彩色的呢?在用户目录的 .profile 里加上这两行即可: export CLICOLOR 1 export LSCOLORSgxfxcxdxbxegedabagacad

深度解析Java可变参数类型以及与数组的区别

可变参数类型:variable argument type 1.可变参数是兼容数组类参数的,但是数组类参数却无法兼容可变参数 //说明:可变参数可以兼容数组参数 public class TestVarArgus {public static void dealArray(int... intArray) {for (int i : intA…

ios nslog 例子_iOS Block实例

iOS之Block详解:Block详解ViewController.h(ARC)#import interface ViewController : UIViewController// 属性声明的block都是全局的__NSGlobalBlock__property (nonatomic, copy) void (^copyBlock)();property (nonatomic, weak) void (^weakBlock)();endViewCon…

boot gwt_带Spring Boot的GWT

boot gwt介绍 我最近一直在研究用Java编写UI代码的选项。 在我以前的文章中,我研究了Eclipse RAP,发现它可以与Spring Boot集成在一个可执行jar中。 这次,我想对GWT做同样的技巧。 每个人都喜欢Spring Boot。 它使很多事情变得更加干净和容易…

工作占用了太多私人时间_下班后还要被逼谈工作,我们应该如何处理?

老板总是下班后在跟我说工作的事情。不理吧,怕领导不高兴,回复了又怕没完没了的占用了自己的私人时间去完成工作,并且以后老板会觉得这样是理所当然,会变本加厉。“幻想花开”是一家装修公司的设计师,公司里的业务量越…

oh-my-zsh中如何去掉命令提示符前缀

终端的提示符前面存在着一长串前缀:用户名主机名,有时候命令稍微长点,一整行就放不下,于是找到了消除前缀的办法: 输入快捷键 Shift Command G,在前往文件夹输入框中输入 ~/.oh-my-zsh/themes/&#xff…

迁移学习 简而言之_简而言之SPIFFE

迁移学习 简而言之我一直在研究SPIFEE(每个人的安全生产身份框架)[1],在这里,我正在按照我现在的理解起草流程,以使任何其他试图了解流程的人受益。 身份注册表 – SPIRE服务器具有自己的身份注册表,该注册…

MyBatisPlus使用教程

lt是小于 gt是大于

cap理论具体含义_架构设计之「 CAP 定理 」

在计算机领域,如果是初入行就算了,如果是多年的老码农还不懂 CAP 定理,那就真的说不过去了。CAP可是每一名技术架构师都必须掌握的基础原则啊。现在只要是稍微大一点的互联网项目都是采用 分布式 结构了,一个系统可能有多个节点组…

用于zsh的高亮插件 zsh-syntax-highlighting

文章目录简介安装配置简介 zsh-syntax-highlighting 插件为 shell zsh 提供语法高亮显示。当命令在 zsh 提示符下输入到交互式终端时,它可以突出显示命令。这有助于在运行命令之前检查命令,特别是捕获语法错误。 主页地址:https://github.c…

项目不能使用fn标签_无服务器,Java和FN项目的第一步

项目不能使用fn标签无服务器不是什么新事物,但是可以说,仍然有很多关于它的炒作,以及它将如何改变一切,以及未来将如何成为无服务器。 除了云提供商提供的无服务器/功能之外,还有越来越多的无服务器项目正在我们的路上…

tomcat目录下创建临时文件,长时间没有使用会被系统清理掉

原因 原因:在linux系统中,spring boot应用服务每次使用java -jar启动后都会在/tmp目录下生成如下目录: hsperfdata_root tomcat.***.9008(中间是一串数字,结尾是应用端口号) tomcat-docbase..9008&#x…

iTerm2的颜色主题/配色主题/配色方案

文章目录直接下载配色方案包使用命令下载安装配色方案直接下载配色方案包 GitHub 主页地址:https://github.com/mbadolato/iTerm2-Color-Schemes 颜色方案下载地址:https://iterm2colorschemes.com/ 下载压缩包后对其进行解压缩,打开目录找…

android 技能标签功能_iOS和Android用户体验设计差异

摘要:iOS和Android用户体验设计差异关键词:iOS,Android,用户体验设计本文将讨论iOS和Android之间的具体设计差异。基本差异1、设计规范 iOS和Android遵循不同的设计规范。2、度量单位 iOS应用程序设计是在pt中开发的,而…

java线程池返回线程状态_Java线程的不同状态

java线程池返回线程状态介绍 在Java中,线程可以具有状态。 Thread.State枚举定义Java线程可以具有的不同状态。 该枚举定义了以下值– 新 可运行 已封锁 等候 TIMED_WAITING 已终止 在随后的部分中,我将简要概述这些状态以及它们之间的可能过渡。…

远程Linux主机安装Oh My Zsh

文章目录介绍安装安装后介绍 Oh My Zsh is an open source, community-driven framework for managing your Zsh configuration. 安装 如果你的服务器没有安装 zsh,则要先安装 zsh: yum install zsh要先安装 git: yum install git然后安…