64903
Goto Top

Logfile-Filterung per Batch

Hallo!

Ich habe mal wieder ein recht kniffeliges Problem....

In einem Logfile "Fehler.log" steht unter anderem folgendes:
2010-04-14 06:43:19,569 ERROR [ .... TEXT ... ] ... TEXT ...

Solche ERROR-Zeilen möchte ich nun herausfiltern (in eine "Auswertung.log" schreiben).
Das Suchen soll mit findstr durchgeführt werden.

Da die Batch als Dienst laufen soll, dürfen nur Zeilen herausgefiltert werden, die nicht
bereits im "Auswertung.log" vorhanden sind.

Bin dankbar für jeden Tipp!
Gruß
Olli

Content-Key: 140629

Url: https://administrator.de/contentid/140629

Printed on: April 24, 2024 at 16:04 o'clock

Mitglied: 77559
77559 Apr 14, 2010 at 12:36:11 (UTC)
Goto Top
Hallo Olli,

wie wärs hiermit - ungetestet:
Findstr /I "ERROR" <Fehler.log | Findstr /V /G:Auswertung.log >>Auswertung.log  

Gruß
LotPings
Mitglied: 64903
64903 Apr 14, 2010 at 13:20:03 (UTC)
Goto Top
Findstr /I "ERROR" <Fehler.log | Findstr /V /G:Auswertung.log >>Auswertung.log  

Hi LotPings,
findstr /C:"ERROR [" Fehler.log >> Auswertung.log  
funktioniert! Es werden nur ERROR-Zeilen in die "Auswertung.log" geschrieben.

Das mit dem Suchen im "Auswertung.log" funktioniert so aber nicht.
| Findstr /V /G:Auswertung.log
Wonach wird denn hier gesucht?
Mitglied: 77559
77559 Apr 14, 2010 at 13:56:14 (UTC)
Goto Top
Die vorher gefundenen Zeilen sollten dadurch mit der vorhandenen Auswertung.log abgegelichen werden und nur nicht schon vorhandene an die Auswertung.log angehängt werden. Das funktioniert aber leider so auch nicht ohne zwischengeschaltete Temporäre Datei.

Wie gesagt das war aus dem Handgelenk und ungetestet.

Dies sollte funktionieren:
Findstr /I "ERROR" <Fehler.log | Findstr /V /G:Auswertung.log >Temp.log  
Type Temp.log >>Auswertung.log

Gruß
LotPings
Mitglied: 64903
64903 Apr 14, 2010 at 14:27:47 (UTC)
Goto Top
Mit der zwischengeschalteten temporären Datei klappt's.
Danke!

Doch leider gibt es doch noch ein Problem:
Die Zeilen sind teilweise knapp über 300 Zeichen lang und es kommt folgende Meldung: "FINDSTR: Suchzeichenfolge zu lang."

Zum Vergleichen würden die ersten 23 Zeichen ausreichen - aus dem Beispiel von oben also: 2010-04-14 06:43:19,569

Gruß
Olli
Mitglied: 77559
77559 Apr 14, 2010 at 15:00:37 (UTC)
Goto Top
Hallo Olli,

wenn die Restriktionen der vorhandenen Tools den Einsatz verbieten, bist du mit einer Batch-Lösung und die auch noch als Dienst am Ende der Fahnenstange.

Ohne jetzt dein genaues Umfld zu kennen würde ich LogParser oder eine anderes auf die Bearbeitung von LogFiles spezialisiertes Tool vorschlagen.

gruß
LogParser
Mitglied: 64903
64903 Apr 14, 2010 at 15:52:14 (UTC)
Goto Top
Hmmm.... ich hab zwar noch keine Idee wie, aber das muss doch machbar sein.
Gibt FINDSTR denn immer ganze Zeilen zurück?
Ansonsten könnte man ja in einem "Vergleich.log" nur das 23 Zeichen-Datumsformat abspeichern.

Das soll jedenfalls unbedingt als Batch laufen. Und eine läuffähige Endlos-Loop-Batch als Dienst einzurichten ist ja kein Problem.

Ist folgendes nicht machbar?
1) Fehler.log "YYYY-MM-DD HH:MM:SS,XXX ERROR [ .... TEXT ... ] ... TEXT ..."
2) Vergleich.log "YYYY-MM-DD HH:MM:SS,XXX"
3) Auswertung.log "YYYY-MM-DD HH:MM:SS,XXX ERROR [ .... TEXT ... ] ... TEXT ..."

Wenn "YYYY-MM-DD HH:MM:SS,XXX" aus Fehler.log bereits in Vergleich.log vorhanden mache nichts,
ansonsten schreibe "YYYY-MM-DD HH:MM:SS,XXX ERROR [ .... TEXT ... ] ... TEXT ..." in Auswertung.log

Gruß
Olli
Mitglied: 77559
77559 Apr 14, 2010 at 23:08:51 (UTC)
Goto Top
Zitat von @64903:
Hmmm.... ich hab zwar noch keine Idee wie, aber das muss doch machbar sein.
Gibt FINDSTR denn immer ganze Zeilen zurück?
Per Definition, JA.
AFAIK lässt sich die Restriktion der Zeilenlänge auch nicht umgehen.

Irgendwie entzieht sich mir auch der Sinn des Ganzen.
Solange niemand die erzeugte Datei beachtet ist das doch nur unnötige Energieverschwendung.

Gruß
LotPings