日志间隔_在日志中搜索时间间隔
日志間隔
介紹
這篇文章與我有關日志分析的迷你系列文章間接相關。 最好閱讀兩個主要部分,以更好地理解我在說什么。 第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
日志間隔
總結
以上是生活随笔為你收集整理的日志间隔_在日志中搜索时间间隔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ide 日志 乱码_IDE日志分析方法p
- 下一篇: 扎克伯格:与马斯克的笼斗不会发生,态度认