Elemente aus einem Logfile zur Suche in einem anderen verwenden
Verfasst: Mittwoch 12. September 2018, 12:31
Hallo zusammen,
ich bin Python Neuling und zwar aus der Not heraus geboren. Ich betreue ein System, welches mir zwei relevante Logfiles liefert.
Das erste ist eine Kurzfassung um ein Überblick zu erhalten und das zweite ist das, in dem jede Kleinigkeit mitgeschrieben wird.
Es geht bei dem System um Kommunikation DTMF-Ton basierter Geräte. im Zuge der Umstellung der Telefonnetze auf Voip, kommt es zu Fehlkommunikation zwischen den Gräten. Ziel meines Projektes ist, die Kommunikation zweier Geräte aus dem Logfile zu separieren und über einen gewissen Zeitraum zu dokumentieren / auszuwerten.
Bislang habe ich dazu ein Debian 9 System aufgesetzt, das sich täglich die Logfiles kopiert. Anhand von Shell-Skripten habe ich schon ein paar Erfahrungen mit den Eigenarten der beiden Logfiles sammeln können, allerdings bin ich dort an Grenzen gestoßen, die ich hoffe mit Python überwinden zu können.
Logfile 1 (log_file) wird immer am Ende einer gelungenen bzw. misslungenen Kommunikation geschrieben.
Es sollen, die Zeilen mit "ISDN Fehlanruf" extrahiert werden, diese sehen, wie folgt aus:
1620 31/08/18 00:09:36 ISDN Fehlanruf C:00 xxxx xxxxxxxxxxx Diag:DEKODIERUNGSFEHLER ,
^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^
Lfd. Zeitstempel Beschreibung Duwa Rufnummer
und daraus folgende Angaben zur Weiterverarbeitung entnommen werden:
1. Datum im Format Jahr-Monat-Tag plus entsprechendem Zeitstempel,
2. Die Durchwahlnummer (Duwa),
3. Die Rufnummer (11 stellig, manchmal auch 10stellig)
Diese Angaben sollen im weiteren Verlauf, dazu Verwendet werden, die entsprechende Kommunikation aus dem zweiten Logfile zu isolieren.
Bislang habe ich ein Skript geschrieben, welches mit der Angabe des Datums aufgerufen wird und mir die gewünschten Parameter aus dem Logfile in die Standardausgabe schreibt.
Wie kann der von mir konstruierte Ausgabe String evtl. vereinfacht werden?
Die "print" Anweisung funktioniert, die "write" Anweisung leider nicht mit der gleichen Syntax. Worin muss sich die Syntax zwischen print und write unterscheiden, so dass mein konstruierter String in der write Anweisung funktioniert?
Wie kann ich folgendes Skript eleganter gestalten?
#!/usr/bin/python
#
#
import sys
Datum = sys.argv[1]
err = "ISDN Fehlanruf"
log_path = "/var/log/ESI/ESI2/"
log_file = "F1log_"
write_path = "/home/marc/python/"
write_file = "PY_Auswertung.txt"
fobj_in = open(log_path + log_file + Datum + ".txt")
fobj_out = open(write_path + write_file ,"w")
for line in fobj_in:
if err in line:
print ("20" + line[11:13] + "-" + line[8:10] + "-" + line[5:7] + " " + line[14:22] + " " + line[43:59])
fobj_out.write("20" + line[11:13] + "-" + line[8:10] + "-" + line[5:7] + " " + line[14:22] + " " + line[43:59] n')
fobj_in.close()
fobj_out.close()
ich bin Python Neuling und zwar aus der Not heraus geboren. Ich betreue ein System, welches mir zwei relevante Logfiles liefert.
Das erste ist eine Kurzfassung um ein Überblick zu erhalten und das zweite ist das, in dem jede Kleinigkeit mitgeschrieben wird.
Es geht bei dem System um Kommunikation DTMF-Ton basierter Geräte. im Zuge der Umstellung der Telefonnetze auf Voip, kommt es zu Fehlkommunikation zwischen den Gräten. Ziel meines Projektes ist, die Kommunikation zweier Geräte aus dem Logfile zu separieren und über einen gewissen Zeitraum zu dokumentieren / auszuwerten.
Bislang habe ich dazu ein Debian 9 System aufgesetzt, das sich täglich die Logfiles kopiert. Anhand von Shell-Skripten habe ich schon ein paar Erfahrungen mit den Eigenarten der beiden Logfiles sammeln können, allerdings bin ich dort an Grenzen gestoßen, die ich hoffe mit Python überwinden zu können.
Logfile 1 (log_file) wird immer am Ende einer gelungenen bzw. misslungenen Kommunikation geschrieben.
Es sollen, die Zeilen mit "ISDN Fehlanruf" extrahiert werden, diese sehen, wie folgt aus:
1620 31/08/18 00:09:36 ISDN Fehlanruf C:00 xxxx xxxxxxxxxxx Diag:DEKODIERUNGSFEHLER ,
^^^^ ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^ ^^^^^^^^^^^^^^
Lfd. Zeitstempel Beschreibung Duwa Rufnummer
und daraus folgende Angaben zur Weiterverarbeitung entnommen werden:
1. Datum im Format Jahr-Monat-Tag plus entsprechendem Zeitstempel,
2. Die Durchwahlnummer (Duwa),
3. Die Rufnummer (11 stellig, manchmal auch 10stellig)
Diese Angaben sollen im weiteren Verlauf, dazu Verwendet werden, die entsprechende Kommunikation aus dem zweiten Logfile zu isolieren.
Bislang habe ich ein Skript geschrieben, welches mit der Angabe des Datums aufgerufen wird und mir die gewünschten Parameter aus dem Logfile in die Standardausgabe schreibt.
Wie kann der von mir konstruierte Ausgabe String evtl. vereinfacht werden?
Die "print" Anweisung funktioniert, die "write" Anweisung leider nicht mit der gleichen Syntax. Worin muss sich die Syntax zwischen print und write unterscheiden, so dass mein konstruierter String in der write Anweisung funktioniert?
Wie kann ich folgendes Skript eleganter gestalten?
#!/usr/bin/python
#
#
import sys
Datum = sys.argv[1]
err = "ISDN Fehlanruf"
log_path = "/var/log/ESI/ESI2/"
log_file = "F1log_"
write_path = "/home/marc/python/"
write_file = "PY_Auswertung.txt"
fobj_in = open(log_path + log_file + Datum + ".txt")
fobj_out = open(write_path + write_file ,"w")
for line in fobj_in:
if err in line:
print ("20" + line[11:13] + "-" + line[8:10] + "-" + line[5:7] + " " + line[14:22] + " " + line[43:59])
fobj_out.write("20" + line[11:13] + "-" + line[8:10] + "-" + line[5:7] + " " + line[14:22] + " " + line[43:59] n')
fobj_in.close()
fobj_out.close()