首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java堆栈跟踪正则表达式

Java堆栈跟踪正则表达式
EN

Stack Overflow用户
提问于 2019-06-14 13:06:55
回答 2查看 560关注 0票数 0

如果是像这样的堆栈跟踪,我需要匹配Java堆栈跟踪

代码语言:javascript
运行
复制
Exception in thread "main" java.lang.IllegalStateException: A book has a null property
        at com.example.myproject.Author.getBookIds(Author.java:38)
        at com.example.myproject.Bootstrap.main(Bootstrap.java:14)
Caused by: java.lang.NullPointerException
        at com.example.myproject.Book.getId(Book.java:22)
        at com.example.myproject.Author.getBookIds(Author.java:36)

我可以将它与^[[:space:]]+(at|\.{3})\b|^Caused by:匹配,问题是我需要匹配整个堆栈跟踪,我得到的跟踪如下所示:

代码语言:javascript
运行
复制
2019-06-14 15:07:08,142 ThreadPoolAsyncTaskExecutor::Thread 65 ERROR bamboo_user 906x78989x1 vg7ahz 192.168.181.28 /rest/plugins/1.0/bg.nemetschek.jsd.advance-customer-reports-key [o.e.g.b.e.i.dependencies.startup.DependencyWaiterApplicationContextExecutor] Unable to create application context for [bg.nemetschek.jsd.advance-customer-reports], unsatisfied dependencies: none
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from URL [bundle://293.0:0/META-INF/spring/atlassian-plugins-component-imports.xml]; nested exception is java.lang.IllegalStateException: The bundle is uninstalled.
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
        at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
        at org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext.loadBeanDefinitions(OsgiBundleXmlApplicationContext.java:170)
        at org.eclipse.gemini.blueprint.context.support.OsgiBundleXmlApplicationContext.loadBeanDefinitions(OsgiBundleXmlApplicationContext.java:140)
        at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
        at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:609)
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.access$800(AbstractDelegatedExecutionApplicationContext.java:60)
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext$3.run(AbstractDelegatedExecutionApplicationContext.java:242)
        at org.eclipse.gemini.blueprint.util.internal.PrivilegedUtils.executeWithCustomTCCL(PrivilegedUtils.java:85)
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.startRefresh(AbstractDelegatedExecutionApplicationContext.java:220)
        at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.stageOne(DependencyWaiterApplicationContextExecutor.java:224)
        at org.eclipse.gemini.blueprint.extender.internal.dependencies.startup.DependencyWaiterApplicationContextExecutor.refresh(DependencyWaiterApplicationContextExecutor.java:177)
        at org.eclipse.gemini.blueprint.context.support.AbstractDelegatedExecutionApplicationContext.refresh(AbstractDelegatedExecutionApplicationContext.java:157)
        at org.eclipse.gemini.blueprint.extender.internal.activator.LifecycleManager$1.run(LifecycleManager.java:207)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalStateException: The bundle is uninstalled.
        at org.apache.felix.framework.Felix.getBundleResources(Felix.java:1624)
        at org.apache.felix.framework.BundleImpl.getResources(BundleImpl.java:661)
        at org.eclipse.gemini.blueprint.util.BundleDelegatingClassLoader.getResources(BundleDelegatingClassLoader.java:185)
        at org.springframework.core.io.support.PropertiesLoaderUtils.loadAllProperties(PropertiesLoaderUtils.java:177)
        at org.springframework.beans.factory.xml.DefaultNamespaceHandlerResolver.getHandlerMappings(DefaultNamespaceHandlerResolver.java:155)
        at org.eclipse.gemini.blueprint.extender.internal.support.NamespacePlugins$Plugin.resolve(NamespacePlugins.java:77)
        at org.eclipse.gemini.blueprint.extender.internal.support.NamespacePlugins$5.operate(NamespacePlugins.java:209)
        at org.eclipse.gemini.blueprint.extender.internal.support.NamespacePlugins$5.operate(NamespacePlugins.java:205)
        at org.eclipse.gemini.blueprint.extender.internal.support.LazyBundleRegistry.apply(LazyBundleRegistry.java:159)
        at org.eclipse.gemini.blueprint.extender.internal.support.NamespacePlugins.doResolve(NamespacePlugins.java:205)
        at org.eclipse.gemini.blueprint.extender.internal.support.NamespacePlugins.resolve(NamespacePlugins.java:169)
        ... 2 filtered
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.eclipse.gemini.blueprint.context.support.TrackingUtil$OsgiServiceHandler.invoke(TrackingUtil.java:106)
        at com.sun.proxy.$Proxy605.resolve(Unknown Source)
        at org.eclipse.gemini.blueprint.context.support.DelegatedNamespaceHandlerResolver.resolve(DelegatedNamespaceHandlerResolver.java:55)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1406)
        at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1401)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:168)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:138)
        at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:94)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:508)
        at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
        ... 20 more

实际的问题是,... 20 more... 2 filtered没有得到匹配,而且我无法匹配整个跟踪,因此我可以将其作为一个字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-14 13:52:33

一个选项可能是从以日期开始的字符串中匹配。然后重复所有不以日期开头或有at的行。然后确保与at匹配至少1行,然后匹配所有行,直到下一次日期:

代码语言:javascript
运行
复制
^\d{4}-\d{2}-\d{2}.*(?:\n(?!(?:\d{4}-\d{2}-\d{2}|\h+at)).*)*\n\h+at\h+.*(?:\n(?!\d{4}-\d{2}-\d{2}).*)*

解释

  • 字符串的^开始
  • \d{4}-\d{2}-\d{2}.*匹配一个类似日期的模式,后面跟着0+乘以除新行之外的任何字符
  • (?:非捕获群
    • \n(?!(?:\d{4}-\d{2}-\d{2}|\h+at)).*匹配换行符,然后断言右边的不是类似日期的模式或1+水平空格字符后面跟着at。如果是这样,则匹配0+乘以除换行符以外的任何字符。

  • )*关闭非捕获组并重复0+时间
  • \n\h+at\h+.*匹配以at为起始的一行,该行由1+水平空格字符包围。
  • (?:\n(?!\d{4}-\d{2}-\d{2}).*)*匹配所有未以类似日期模式开头的行

Regex演示

注意在Java中双转义反斜杠:

代码语言:javascript
运行
复制
String regex = "^\\d{4}-\\d{2}-\\d{2}.*(?:\\n(?!(?:\\d{4}-\\d{2}-\\d{2}|\\h+at)).*)*\\n\\h+at\\h+.*(?:\\n(?!\\d{4}-\\d{2}-\\d{2}).*)*";
票数 2
EN

Stack Overflow用户

发布于 2019-06-14 13:34:33

试试Regex:^(?:Caused by:|\s+(?:at|\.{3})).*$

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56598853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档