Datumbezogenes Auslesen von Logfiles
Hallo zusammen,
ich bin neu hier im Forum und habe ein Problem mit einem Batch. Es geht darum ein Logfile auszuwerten das über einen Monat lang täglich befüllt wird.
Dateiname: PG-2017-05.log
Inhalt:
30 20:17:43 INFO Programm start
30 20:17:48 INFO Listen für alle Systeme erstellen...
30 20:22:33 INFO Daten ermitteln für XXXXXX....
30 20:22:35 INFO Daten ermitteln zum Datum '05/31/2017 00:00:00'...
30 20:48:05 INFO Program done.
Das Programm schreibt z.B. am 31.05. Meldungen für den Vortag rein, also den 30.05.
Was ich jetzt abzufangen versuche sind solche Meldungen:
24 06:57:40 INFO Programm start
24 06:57:41 ERROR Program System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at Program.Main()
Gelöst habe ich es bisher so:
Das funktioniert wunderbar, würde mir aber jeden Tag eine Fehlermail verschicken obwohl an diesem Tag kein Fehler aufgetreten ist. Rein theoretisch wüsste ich was ich machen muss, aber leider bin ich überhaupt nicht fit in Batchprogrammierung (dieses Programm habe ich mir mit Codeschnipseln u.a. von Eurer Seite zusammengefummelt
) somit kann ich das nicht in Code fassen.
Es müsste also am Anfang der Zeile nach dem Tag geguckt werden der den Logeintrag "verursacht" hat im obigen Beispiel also 30, dann in dem Bereich nach "ERROR" suchen und diese Zeile in die "fehler_programm.txt" schreiben und per Mail verschicken.
Ich hoffe ich konnte mein Problem verständlich erklären und ihr könnt mir bei der Lösung helfen.
Vielen Dank schon mal im Voraus für's reindenken!
Viele Grüße
Elke
ich bin neu hier im Forum und habe ein Problem mit einem Batch. Es geht darum ein Logfile auszuwerten das über einen Monat lang täglich befüllt wird.
Dateiname: PG-2017-05.log
Inhalt:
30 20:17:43 INFO Programm start
30 20:17:48 INFO Listen für alle Systeme erstellen...
30 20:22:33 INFO Daten ermitteln für XXXXXX....
30 20:22:35 INFO Daten ermitteln zum Datum '05/31/2017 00:00:00'...
30 20:48:05 INFO Program done.
Das Programm schreibt z.B. am 31.05. Meldungen für den Vortag rein, also den 30.05.
Was ich jetzt abzufangen versuche sind solche Meldungen:
24 06:57:40 INFO Programm start
24 06:57:41 ERROR Program System.FormatException: String was not recognized as a valid DateTime.
at System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
at Program.Main()
Gelöst habe ich es bisher so:
@echo off & setlocal
set "Pfad=K:\Programm\Logs"
set "Checklog=fehler_programm.txt"
if exist %Pfad%\%Checklog% del %Checklog%
for /f "skip=1" %%x in ('wmic os get localdatetime') do if not defined MyDate set MyDate=%%x
set today=%MyDate:~0,4%-%MyDate:~4,2%
set day=%MyDate:~6,2%
echo %today%
set "Logdatei=%Pfad%\PG-%today%.log"
set "ziel=%Pfad%\%Checklog%"
for %%a in (%Logdatei%) do @(
for /f "tokens=1,3 delims=" %%b in ('findstr /ic:"ERROR" "%%a" 2^>nul') do @( >>"%ziel%" echo %%b %%c
)
)
rem if exist %Pfad%\%Checklog% goto mail
goto :eof
:mail
C:\IS\util_blat\blat %Pfad%\%Checklog% -subject "Fehler bei Programm" -to mymail@mymailserver.com -i "absender@mymailserver.com"
goto :eof
Das funktioniert wunderbar, würde mir aber jeden Tag eine Fehlermail verschicken obwohl an diesem Tag kein Fehler aufgetreten ist. Rein theoretisch wüsste ich was ich machen muss, aber leider bin ich überhaupt nicht fit in Batchprogrammierung (dieses Programm habe ich mir mit Codeschnipseln u.a. von Eurer Seite zusammengefummelt
Es müsste also am Anfang der Zeile nach dem Tag geguckt werden der den Logeintrag "verursacht" hat im obigen Beispiel also 30, dann in dem Bereich nach "ERROR" suchen und diese Zeile in die "fehler_programm.txt" schreiben und per Mail verschicken.
Ich hoffe ich konnte mein Problem verständlich erklären und ihr könnt mir bei der Lösung helfen.
Vielen Dank schon mal im Voraus für's reindenken!
Viele Grüße
Elke
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 339399
Url: https://administrator.de/forum/datumbezogenes-auslesen-von-logfiles-339399.html
Ausgedruckt am: 05.05.2025 um 07:05 Uhr
2 Kommentare
Neuester Kommentar

Hallo.
Mach doch einfach noch ein findstr in die For-Schleife in Zeile 16 die nach dem Tag am Zeilenanfang filtert:
oder stattdessen gleich so
Gruß v
Mach doch einfach noch ein findstr in die For-Schleife in Zeile 16 die nach dem Tag am Zeilenanfang filtert:
for /f "tokens=1,3 delims=" %%b in ('findstr /ic:"ERROR" "%%a" 2^>nul ^| findstr /b "%day%" 2^>nul') do @( >>"%ziel%" echo %%b %%c
for /f "delims=" %%a in ('findstr /ib "%day%.*ERROR" "%Logdatei%" 2^>nul') do (
>>"%ziel%" echo(%%a
)