我正在处理一款古老的Java应用程序,它没有日志记录,并且只将所有信息打印到控制台。大多数异常也通过调用printStackTrace()来“处理”。
简而言之,我刚刚将System.out和System.error流重定向到日志文件中,现在我需要解析该日志文件。到目前为止,一切都好,但我在尝试解析堆栈跟踪时遇到了问题。
部分代码也被混淆了,因此我需要通过一个实用程序来解除堆栈跟踪的混淆。我正在尝试自动化所有这些操作。
到目前为止,我最接近的方法是使用以下内容获取初始异常行:
简而言之,我刚刚将System.out和System.error流重定向到日志文件中,现在我需要解析该日志文件。到目前为止,一切都好,但我在尝试解析堆栈跟踪时遇到了问题。
部分代码也被混淆了,因此我需要通过一个实用程序来解除堆栈跟踪的混淆。我正在尝试自动化所有这些操作。
到目前为止,我最接近的方法是使用以下内容获取初始异常行:
.+Exception[^\n]+
使用以下方法查找“at ..(..)”行:
(\t+\Qat \E.+\s+)+
但是我不知道如何将它们组合在一起以获取完整的堆栈跟踪。
基本上,日志文件看起来像以下内容。没有固定的结构,堆栈跟踪之前和之后的行完全随机:
Modem ERROR (AT
Owner: CoreTalk
) - TIMEOUT
IN []
Try Open: COM3
javax.comm.PortInUseException: Port currently owned by CoreTalk
at javax.comm.CommPortIdentifier.open(CommPortIdentifier.java:337)
...
at UniPort.modemService.run(modemService.java:103)
Handling file: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify
java.io.FileNotFoundException: C:\Program Files\BackBone Technologies\CoreTalk 2006\InputXML\notify (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
...
at com.gobackbone.Store.a.a.handle(Unknown Source)
at com.jniwrapper.win32.io.FileSystemWatcher.fireFileSystemEvent(FileSystemWatcher.java:223)
...
at java.lang.Thread.run(Unknown Source)
Load Additional Ports
... Lots of random stuff
IN []
[Fatal Error] .xml:6:114: The entity name must immediately follow the '&' in the entity reference.
org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
...
at com.gobackbone.Store.a.a.run(Unknown Source)
+
和++
有什么区别? - Ahmed Akhtar