Я работаю с унаследованным Java-приложением, которое не ведет журналы и просто выводит всю информацию на консоль. Большинство исключений также «обрабатываются» простым вызовом printStackTrace ().
Вкратце, я только что перенаправил потоки 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)