匹配整个Java异常堆栈跟踪的正则表达式
给定java应用程序的标准日志文件:匹配整个Java异常堆栈跟踪的正则表达式,java,regex,logging,grep,Java,Regex,Logging,Grep,给定java应用程序的标准日志文件: INFO [main] (AutoMain.java:133) - querying data 1 DEBUG [main] (AutoMain.java:142) - data 1 count: 23180 INFO [main] (AutoMain.java:151) - querying data 2 ERROR [main] (AutoMain.java:607) - Failure in auto java.net.ConnectExcepti
INFO [main] (AutoMain.java:133) - querying data 1
DEBUG [main] (AutoMain.java:142) - data 1 count: 23180
INFO [main] (AutoMain.java:151) - querying data 2
ERROR [main] (AutoMain.java:607) - Failure in auto
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
at com.myCompany.client.queryData(Client.java:83)
at com.myCompany.client.queryData(Client.java:91)
at com.myCompany.queryOptData(InstantAutomaton.java:153)
at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
但我也想要所有后续的“at”语句。因此,结果匹配字符串应为:
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
at com.myCompany.client.queryData(Client.java:83)
at com.myCompany.client.queryData(Client.java:91)
at com.myCompany.queryOptData(InstantAutomaton.java:153)
at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
java.net.ConnectException:连接被拒绝(连接被拒绝)
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
在com.myCompany.client.clientofactory$1。(clientofactory.java:17)
位于com.myCompany.client.clientofactory.lambda$clientofactoryfromsocket$0(clientofactory.java:15)
位于com.myCompany.client.queryData(client.java:83)
位于com.myCompany.client.queryData(client.java:91)
在com.myCompany.queryOptData(instantautomon.java:153)
在com.myCompany.AutoMain.main(InstantAutomaton.java:426)
提前感谢您的考虑和回复。使用Java+8,您可以:
(?m)^.*?Exception.*(?:\R+^\s*at .*)+
看
但是,在grep中,由于默认情况下它一次处理一行,因此可以将行与异常
或以开头的行
匹配:
grep -P '(?m)^(?:\S+?Exception|\h+at )' file
当您可以在任何UNIX机器上的任何shell中使用任何awk轻松地执行此操作时,请不要使用复杂的、不可移植的regexp:
$ awk '/^[^ ]/{f=0} /Exception/{f=1} f' file
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
at com.myCompany.client.queryData(Client.java:83)
at com.myCompany.client.queryData(Client.java:91)
at com.myCompany.queryOptData(InstantAutomaton.java:153)
at com.myCompany.AutoMain.main(InstantAutomaton.java:426)
$awk'/^[^]/{f=0}/Exception/{f=1}f'文件
java.net.ConnectException:拒绝连接(拒绝连接)
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
位于java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
位于java.net.socksocketimpl.connect(socksocketimpl.java:392)
位于java.net.Socket.connect(Socket.java:589)
位于java.net.Socket.connect(Socket.java:538)
位于java.net.Socket。(Socket.java:434)
位于java.net.Socket。(Socket.java:211)
在com.myCompany.client.clientofactory$1。(clientofactory.java:17)
位于com.myCompany.client.clientofactory.lambda$clientofactoryfromsocket$0(clientofactory.java:15)
位于com.myCompany.client.queryData(client.java:83)
位于com.myCompany.client.queryData(client.java:91)
在com.myCompany.queryOptData(instantautomon.java:153)
在com.myCompany.AutoMain.main(InstantAutomaton.java:426)
尝试(?m^.*?异常。*(?:[\r\n]+^\s*at.*)+
。请看这里的live demo@revo Thank you,但您给出的表达式与grep不起作用。您知道grep的语法是否与live demo有所不同吗?不过,有些异常名称中可能不包含异常。如果是这样的话,grep-v'^[A-Z]{2}'
(char类中有一个空格)可能值得一试。(它假设日志总是1行长,并且命名约定得到遵守,因此只有不以2个空格或大写开头的行是异常及其堆栈跟踪)使用GNUgrep
您可以执行grep-P'(?m)^(?:::\S+?Exception |\h+at)
@revo文件,再次感谢。请随意回答,我会投票给你…这不包括由堆栈跟踪的部分引起的。而且也是一次性的,所以(异常|错误)
可能更可取。
$ awk '/^[^ ]/{f=0} /Exception/{f=1} f' file
java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:211)
at com.myCompany.client.ClientIOFactory$1.<init>(ClientIOFactory.java:17)
at com.myCompany.client.ClientIOFactory.lambda$clientIOFactoryFromSocket$0(ClientIOFactory.java:15)
at com.myCompany.client.queryData(Client.java:83)
at com.myCompany.client.queryData(Client.java:91)
at com.myCompany.queryOptData(InstantAutomaton.java:153)
at com.myCompany.AutoMain.main(InstantAutomaton.java:426)