建立网站有免费的吗,wp网站如何做多级联动筛选框,手机销售网站模板,淮安住房与城乡建设部网站介绍 这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分#xff0c;以更好地理解我在说什么。 第1 部分 #xff0c; 第2部分 。 这篇文章描述了我在实现IDE方法时遇到的一个重要问题。 任务描述 当某人使用日志时#xff0c;通常只需要调查一个时间… 介绍 这篇文章与我有关日志分析的迷你系列文章间接相关。 最好阅读两个主要部分以更好地理解我在说什么。 第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