Ich arbeite mit einer Legacy-Java-App, die keine Protokollierung hat und nur alle Informationen auf die Konsole überträgt. Die meisten Ausnahmen werden auch "behandelt", indem Sie einfach einen printStackTrace() - Aufruf ausführen.Regulärer Ausdruck zum Analysieren einer Protokolldatei und zum Suchen von Stacktraces
Kurz gesagt, ich habe gerade die System.out und System.error Streams in eine Protokolldatei umgeleitet, und jetzt muss ich diese Protokolldatei analysieren. Soweit alles gut, aber ich habe Probleme, die Protokolldatei für Stack-Traces zu analysieren.
Einige der Code ist auch verschleiert, so dass ich die Stacktraces durch eine Utility-App ausführen müssen, um sie zu entschärfen. Ich versuche das alles zu automatisieren.
Der nächstgelegene ich so weit gekommen sind, ist die anfängliche Exception Linie mit diesem zu erhalten:
.+Exception[^\n]+
und die Suche nach der "at .. (..)" Linien mit:
(\t+\Qat \E.+\s+)+
Aber ich kann nicht herausfinden, wie man sie zusammensetzt, um den vollen StackTrace zu bekommen.
Die Protokolldateien sehen im Prinzip wie folgt aus. Es gibt keine feste Struktur und die Linien vor und nach dem Stack-Traces ist völlig zufällig:
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)
Das wird nur die erste "at" -Linie finden, nicht alle von ihnen. –
Haben Sie es versucht? Dafür ist das abschließende '+' gedacht. Oder kann es etwas zwischen den "at" -Zeilen geben (sind diese '...' in den eigentlichen Log-Dateien vorhanden)? In Ihrem Beispieltext (zumindest wie hier angegeben) beginnen die Zeilen "at" mit Leerzeichen, nicht mit Tabs. Meine zweite Regex sollte dies jedoch behandelt haben. –
Sorry, ich sehe die zweite Zeile aus irgendeinem Grund nicht ... Verwendung: ^. + Ausnahme [^ \ n] ++ (\ s + at. ++) + Ich bekomme keine Übereinstimmungen. .. Was macht das ++? Ist das nur Abkürzung für: (^. + Ausnahme [^ \ n] +) + ((\ s + at. +) +) + –