簡體   English   中英

正則表達式以匹配整個Java異常Stacktrace

[英]Regular Expression to Match Entire Java Exception Stacktrace

給定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.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 Exception的整個堆棧跟蹤的正則表達式?

匹配包含“ Exception”的任何一行都非常容易:

grep "Exception" log.txt

但我也希望所有后續的“ 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 +8,您可以執行以下操作:

(?m)^.*?Exception.*(?:\R+^\s*at .*)+

在這里觀看現場演示

但是,在grep中,由於默認情況下每次處理一行,因此您可以將Exception行或以at開頭的行進行匹配:

grep -P '(?m)^(?:\S+?Exception|\h+at )' file

當您可以在任何UNIX機器上的任何shell中使用任何awk來進行此操作時,請不要使用復雜的,不可移植的正則表達式:

$ 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM