当前位置: 首页 > 知识库问答 >
问题:

regex-匹配tomcat日志文件中的条目

壤驷彦
2023-03-14

我试图一个接一个地读取每个日志条目。这是日志文件的一部分:

at java.net.Socket.<init>(Socket.java:434)
    at java.net.Socket.<init>(Socket.java:211)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:148)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    ... 31 more
26.03.2018 14:43:57,113| INFO http-nio-8080-exec-10 configService==nullLooking up configuration service on rmi://localhost:1199/ConfigService |com.ase.common.utils.ConfigurationServiceUtils
26.03.2018 14:43:57,113| WARN http-nio-8080-exec-10 Could not connect to services. |com.ase.common.utils.ConfigurationServiceUtils
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) 

这是原木图案

转换模式=%d{dd.MM.yyyy HH:MM:ss,SSS}|%p%t%m|%c%n

我需要从每个条目中获取所有细节,如日期、优先级值、线程、消息和类。这就是我到目前为止所拥有的。

(.*?)\| [A-Z]+ (.*?) (.*?) \|(.*)[\S\s]

它匹配ok所有条目,但没有stacktrace。我需要如何改进我的正则表达式以获得堆栈跟踪?

所以我需要这样做:

Match1 : `26.03.2018 14:43:57,113| INFO http-nio-8080-exec-10 configService==nullLooking up configuration service on rmi://localhost:1199/ConfigService |com.ase.common.utils.ConfigurationServiceUtils` 

Group(1)-> `26.03.2018 14:43:57,113`; Group(2)->`INFO`; Group(3)-> `http-nio-8080-exec-10`; Group(4)->`configService==nullLooking up configuration service on rmi://localhost:1199/ConfigService`; 
Group(5)->`com.ase.common.utils.ConfigurationServiceUtils`

Match2 : `26.03.2018 14:43:57,113| WARN http-nio-8080-exec-10 Could not connect to services. |com.ase.common.utils.ConfigurationServiceUtils
java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
    java.net.ConnectException: Connection refused
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:342)
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) ` 

Group(1)-> `26.03.2018 14:43:57,113`; Group(2)->`WARN`; Group(3)-> `http-nio-8080-exec-10`; Group(4)->`Could not connect to services.`; 
Group(5)->`com.ase.common.utils.ConfigurationServiceUtils`; Group(6)->

    java.rmi.ConnectException: Connection refused to host: localhost; nested exception is: 
        java.net.ConnectException: Connection refused...

共有1个答案

魏景龙
2023-03-14

您应该在正则表达式中使用更具体的捕获组,我将指出:

^(\d+\.\d+\.\d{4}[^|]+)\|\s+(\S+)\s+(\S+)\s+([^|]+)\|(\S+)\s+((?:(?!^\d+\.)[^|])*)

分解:

  • ^(\d\.\d\.\d{4}[^ |]\\\\匹配以日期开始的行(字幕组1)
  • \s(\s)匹配空格并捕获以下非空白字符(CG#2)
  • \s(\s)相同的(CG#3)
  • \s([^ |]\\\\\\\匹配空格和除\/code>(CG#3)以外的任何内容
  • (\S)\S匹配并捕获非空白字符,后跟空格(CG#4)
  • ((?:(?!^\d\)[^ |]*)temperated pattern,检查它是否位于应该作为下一个匹配开始的行的开头。如果不匹配下一个直接字符(CG#5,可选组)

现场演示

 类似资料:
  • 我可以看到它在启动tomcat时被拾取,并且appender配置被正确解析。 我的问题是,我如何让webapp使用其中定义的附加符? 我尝试将和元素放入文件中,但这将生成错误: 中的:

  • 我会很感激任何关于在哪里搜索这些文件的提示。

  • 问题内容: 以下是我在CentOS机器上的Catalina.out文件中唯一条目的录入。我正在使用Spring 3和我的应用程序运行Tomcat 6。他们一整堆,所以我只是挑选了一些不断重复的东西。这并非一直发生,但至少每周发生一次。 问题是我该怎么做才能防止风箱发生? 问题答案: 当您定义一个外部标志时,应该在设置 该标志的同时轮询该线程并退出该线程。否则,该线程可能永远不会看到其他线程所做的更

  • 本文向大家介绍Linux tomcat下catalina.out日志文件分割,包括了Linux tomcat下catalina.out日志文件分割的使用技巧和注意事项,需要的朋友参考一下 Linux tomcat下catalina.out日志文件分割 前言: tomcat默认使用Java.util.logging记录日志,默认只记录tomcat的日志,不记录应用的日志。tomcat支持采用log4

  • 在我的新工作场所,我在新安装的Tomcat上遇到了一些日志文件未找到的错误。这些Tomcat日志文件是catalina.log、localhost_access_log.txt等。那些Tomcat日志文件不在/logs下。该问题同时出现在Windows7上的Tomcat9和Tomcat8上。Windows访问限制会导致此问题吗?

  • 我的WAR正在使用一个log4j FileAppender,该文件是通过WAR中的目录下的文件配置的。 我已将log4j追加器配置为: 通过此配置,我将尝试实现以下功能: 将记录调试级别和更高级别的所有日志消息(因此所有) 我希望文件位于Tomcat的目录下 这种配置是否实现了这些项,如果没有,需要更改什么?