Ich habe diese mehrzeiligen Protokolldatei:Spiel jede Nachricht in einer mehrzeiligen Protokolldatei mit regex
INFO 2017-07-01 12:01:56,987 [Thread-1] Class1:15 This is the message 1
DEBUG 2017-07-01 12:01:56,987 [Thread-1] Class2:15 This is the message 2
that is multiline!
WARN 2017-07-01 12:01:56,987 [Thread-1] Class3:15 This is a warn message
ERROR 2017-07-01 12:01:56,987 [Thread-1] Class4:15 This is an error with the stacktrace...
my.packkageName.MyException: exception!
at my.packkageName.Class4.process(Class4.java:11)
at ...
INFO 2017-07-01 12:01:56,987 [Thread-1] Class1:15 This is another INFO message
Ich mag einen regulären Ausdruck, dass jede einzelne Meldung im Protokoll, auf diese Weise übereinstimmt:
group 1: INFO 2017-07-01 12:01:56,987 [Thread-1] Class1:15 This is the message 1
group 2: DEBUG 2017-07-01 12:01:56,987 [Thread-1] Class2:15 This is the message 2
that is multiline!
group 3: WARN 2017-07-01 12:01:56,987 [Thread-1] Class3:15 This is a warn message
group 4: ERROR 2017-07-01 12:01:56,987 [Thread-1] Class4:15 This is an error with the stacktrace...
my.packkageName.MyException: exception!
at my.packkageName.Class4.process(Class4.java:11)
at ...
Diese Regex ist nur für Single-Line-Nachrichten:
(?:ERROR|DEBUG|INFO|WARN).++
Haben Sie Pattern.MULTILINE oder (? M) hinzugefügt. Diese Option wird am Anfang und am Ende jeder Zeile abgeglichen (andernfalls ist die Übereinstimmung am Anfang/Ende der Zeichenfolge). – fg78nc
Zeile für Zeile lesen, und während eine Zeile nicht mit einem dieser Werte beginnt, wird sie an den aktuellen Datensatz angehängt, andernfalls fügen Sie den Eintrag hinzu, um einen neuen zu beginnen. Wenn das Protokoll klein ist und Sie es in den Speicher laden, können Sie "split" (? M)^(? = ERROR | DEBUG | INFO | WARN) ") –
@ fg78nc ja, ich teste es auf regex101, mit Multiline-Option –