Estoy trabajando con una aplicación heredada de Java que no tiene registro y solo imprime toda la información en la consola. La mayoría de las excepciones también se "manejan" simplemente haciendo una llamada a printStackTrace().Expresión regular para analizar un archivo de registro y encontrar stacktraces
En pocas palabras, acabo de redirigir las secuencias System.out y System.error a un archivo de registro, y ahora tengo que analizar ese archivo de registro. Hasta ahora todo está bien, pero estoy teniendo problemas para analizar el archivo de registro de los rastros de pila.
Parte del código también está obstruido, así que tengo que ejecutar la pila de pistas a través de una aplicación de utilidad para eliminar la obstrucción. Estoy tratando de automatizar todo esto.
Lo más cerca que he llegado hasta ahora es conseguir que la línea de Excepción inicial utilizando la siguiente:
.+Exception[^\n]+
y encontrar el "en .. (..)" líneas usando:
(\t+\Qat \E.+\s+)+
Pero no puedo encontrar la manera de unirlos para obtener la stacktrace completa.
Básicamente, los archivos de registro se parecen a los siguientes. No hay una estructura fija y las líneas antes y después de seguimientos de pila son completamente al azar:
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)
Eso solo encontrará la primera línea "a", no todas. –
¿Lo has probado? Para eso está el '' 'final. ¿O puede haber algo entre las líneas "at" (están estos '...' presentes en los archivos de registro reales)? Además, en su texto de ejemplo (al menos tal como se publicó aquí), las líneas "a" comienzan con espacios, no con pestañas. Mi segunda expresión regular debería haber manejado esto, sin embargo. –
Disculpa, no vi la segunda línea por algún motivo ... Utilizando: ^. + Excepción [^ \ n] ++ (\ s + at. ++) + No obtengo ninguna coincidencia. .. ¿Qué hace el ++? Es solo una abreviatura de: (^. + Excepción [^ \ n] +) + ((\ s + at. +) +) + –