Log Parser
Verfasst: Mittwoch 27. Mai 2009, 13:26
So, ohne Review lernt man ja nichts. Ich habe ein wirklich sehr simples Programm geschrieben das Log Dateien parst. Zur Auswahl der Log stehen zwei Varianten zur Auswahl die über die Variable definiert werden (per Web oder per Datei). Die Logmeldungen werden dann zum einen nach Zeit aussortiert und Loglevel/Verursacher.
Was mir aufgefallen ist, dass mechanize zum Download der Datei relativ lange braucht (gut 2-3x langsamer als wenn ich die Datei direkt aufrufe), ist das normal?
Ansonsten würde ich mich riesig über Verbesserungsvorschläge und besonders über "Schönheits"-Hinweise freuen, wie man den Code effizienter / kompakter machen kann.
Danke schon mal an alle die sich die Zeit nehmen.
Was mir aufgefallen ist, dass mechanize zum Download der Datei relativ lange braucht (gut 2-3x langsamer als wenn ich die Datei direkt aufrufe), ist das normal?
Ansonsten würde ich mich riesig über Verbesserungsvorschläge und besonders über "Schönheits"-Hinweise freuen, wie man den Code effizienter / kompakter machen kann.
Danke schon mal an alle die sich die Zeit nehmen.
Code: Alles auswählen
# -*- coding: cp1252 -*-
import re
import time,calendar,os
from mechanize import Browser
LOG_LEVEL_NOTICE='PHP Notice:'
LOG_LEVEL_FATAL='PHP Fatal error:'
MODE_WEB="http://webserver/logs/php_error.log"
MODE_FILE="log.log"
log_level=(LOG_LEVEL_FATAL,LOG_LEVEL_NOTICE)
source_pattern=('/t-intranet/phpskripte','t-intranet/modules/AModule')
timeIntervall=900
mode=MODE_WEB
def main():
browser=None
if mode==MODE_WEB:
browser=Browser()
browser.open(MODE_WEB)
lines=browser.response().read()
lines=lines.split("\n")
else:
lines=open(MODE_FILE).readlines()
logFile=open("FilterLog.txt","w")
for line in lines[:0:-1]:
if checkTimeStamp(line):
if all( [ any([line.find(substring)!=-1 for substring in log_level]),any([line.find(substring)!=-1 for substring in source_pattern])]):
logFile.write(line+"\n")
else:
if (len(line)!=0):
break
if browser!=None:
browser.close()
logFile.close()
os.startfile("FilterLog.txt")
def checkTimeStamp(line):
logtime=re.findall("\[(.*?)\]",line)
if len(logtime)==0 or logtime[0].count(":")!=2:
return False
logtime=time.strptime(logtime[0],'%d-%b-%Y %H:%M:%S')
return time.mktime(time.localtime()) - time.mktime(logtime) <= timeIntervall
if __name__=='__main__':
main()