Ram*_*gil 3 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.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)
Run Code Online (Sandbox Code Playgroud)
什么是匹配任何 java 的整个堆栈跟踪的正则表达式Exception?
匹配任何包含“Exception”的单行很容易:
grep "Exception" log.txt
Run Code Online (Sandbox Code Playgroud)
但我也想要所有随后的“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)
Run Code Online (Sandbox Code Playgroud)
预先感谢您的考虑和回应。
使用 Java +8 你可以这样做:
(?m)^.*?Exception.*(?:\R+^\s*at .*)+
Run Code Online (Sandbox Code Playgroud)
然而,在 grep 中,由于默认情况下它一次处理一行,您可以匹配以下行Exception或以以下开头的行at:
grep -P '(?m)^(?:\S+?Exception|\h+at )' file
Run Code Online (Sandbox Code Playgroud)