日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2023/12/3 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 日志间隔_在日志中搜索时间间隔 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

日志間隔

介紹

這篇文章與我有關日志分析的迷你系列文章間接相關。 最好閱讀兩個主要部分,以更好地理解我在說什么。 第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

日志間隔

總結

以上是生活随笔為你收集整理的日志间隔_在日志中搜索时间间隔的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。