gpt4 book ai didi

用于匹配来自记录器的异常堆栈跟踪的 Java 正则表达式

转载 作者:行者123 更新时间:2023-11-29 07:56:22 25 4
gpt4 key购买 nike

我有以下获得的正则表达式 Regular expression to parse a log file and find stacktraces

^.+Exception[^\n]++(\s+at .++)+

它非常适合查找堆栈跟踪。但是,我需要找到通过记录器输出的堆栈跟踪(特别是在 Bukkit Minecraft 服务器中)。它们看起来像这样:

2012-08-10 08:19:17 [SEVERE] java.lang.NullPointerException
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.World.tickEntities(World.java:1146)
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:567)
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:212)
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:476)
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:408)
2012-08-10 08:19:17 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)

日期和时间总是会改变,但 [SEVERE] 会一直存在。我正在寻找使用正则表达式捕获异常格式。任何异常,而不仅仅是 NPE。

我真的不知道该怎么做。我查看了一些关于正则表达式的教程,但这些大教程对我来说仍然是胡言乱语。这是我最近的尝试

^.+Exception[^\n]++(.++at .++)+

编辑:好吧,我做了更多的研究,并取得了进一步的进展。我做的:\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}\s\[SEVERE\]与第一部分匹配。不过,我在捕获整个轨迹时遇到了一些问题。

最佳答案

这非常适合您使用 Logger 的方法。默认情况下,堆栈跟踪会打印出堆栈跟踪的每一行的制表符。我的示例将起始行与日期和原始错误消息以及异常错误和堆栈跟踪(如果存在)相匹配。

((?:[a-zA-Z]{3} \d{1,2}, \d{4,4} \d{1,2}:\d{2}:\d{2} (AM|PM) (\(INFO\)|\(SEVERE\)|\(WARNING\))).*\r(?:(.*Exception.*(\r.*)(\tat.*\r)+)))|((?:[a-zA-Z]{3} \d{1,2}, \d{4,4} \d{1,2}:\d{2}:\d{2} (AM|PM) (\(INFO\)|\(SEVERE\)|\(WARNING\))).*)

匹配以下任何一项:

Feb 08, 2014 5:18:00 PM (SEVERE) Thread: 13 [com.datarefresh.refresh.RefreshActionQueuePersister.write] Could not write RefreshActionQueue checkpoint due to error
Feb 09, 2014 1:00:10 AM (INFO) Thread: 14 [com.datarefresh.refresh.RefreshWorker.doPostProcess] (DATA_INSIGHT_DATA_REFRESH.15) Post-processing...
Feb 09, 2014 1:00:20 AM (SEVERE) Thread: 14 [com.datarefresh.refresh.RefreshActionQueuePersister.write] Could not write RefreshActionQueue checkpoint due to error
java.lang.RuntimeException: Could not delete RefreshActionQueue checkpoint file
at com.datarefresh.refresh.RefreshActionQueuePersister.delete(RefreshActionQueuePersister.java:71)
at com.datarefresh.refresh.RefreshActionQueuePersister.write(RefreshActionQueuePersister.java:53)
at com.refresh.RefreshActionQueue.persist(RefreshActionQueue.java:94)
at com.refresh.RefreshActionQueue.removeCurrentAction(RefreshActionQueue.java:48)
at com.refresh.RefreshWorker.doPostProcess(RefreshWorker.java:304)
at com.refresh.RefreshWorker.doActions(RefreshWorker.java:82)
at com.refresh.RefreshWorker.call(RefreshWorker.java:57)
at com.datarefresh.refresh.RefreshWorker.call(RefreshWorker.java:28)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Feb 09, 2014 1:00:20 AM (INFO) Thread: 14 [com.datarefresh.refresh.RefreshWorker.doPostProcess] (DATA_INSIGHT_DATA_REFRESH.16) Done post-processing.

实际上我会从匹配中删除 INFO。

关于用于匹配来自记录器的异常堆栈跟踪的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17438441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com