I am a novice programmer in python. I’m currently constructing a class that parses logfiles and have completed all elements of the class. Nonetheless, as most things in python have gone for me I have either incorrectly formatted my class or have screwed up my semantics. I was wondering if there was a definitive format for constructing classes and whether or not the one I have written, follows said format.
Here are some lines from the log:
2012-06-12 14:02:21,813 [main] INFO ConnectionManager.java (line 238) Initializing the ConnectionManager.
2012-06-12 14:02:21,844 [main] INFO CimListener.java (line 142) Starting listener at http://127.0.0.1:7012
2012-06-12 14:02:21,974 [main] INFO CimListener.java (line 158) Listening at http://127.0.0.1:7012
2012-06-12 14:02:23,209 [main] INFO RmiServiceExporter.java (line 393) Looking for RMI registry at port '10099'
2012-06-12 14:02:23,232 [main] INFO RmiServiceExporter.java (line 404) Could not detect RMI registry - creating new one
And here is the class:
import re
import time
import calendar
from datetime import datetime
f = open("C:\Users\-----\Desktop\Real Logs\controllersvc.log", "r")
while True:
line = f.readline()
if not line:
break
class LogLine:
SEVERITIES = ['EMERG','ALERT','CRIT','ERR','WARNING','NOTICE','INFO','DEBUG']
severity = 1
def __init__(self, line):
try:
timestr, msstr, sevstr, self.filename, linestr, self.message = re.match(r"^(\d\d\d\d-\d\d-\d\d[ \t]\d\d:\d\d:\d\d),(\d\d\d),(?i[a-z]+),([A-Za-z]{1,.}),([(]\[lL]ine\>\s+\d+[)]),^(?<=\)\s?\w+$)", line).groups()
self.line = int(linestr)
self.sev = self.SEVERITIES.index(sevstr)
self.time = float(calendar.timegm(time.strptime(timestr, "%Y-%m-%d %H:%M:%S,%f"))) + float(msstr)/1000.0
dt = datetime.strptime(t, "%Y-%m-%d %H:%M:%S,%f")
except Exception:
print 'error',self.filename
def get_time(self):
return self.time
def get_severity(self):
return self.sev
def get_message(self):
return message
def get_filename(self):
return filename
def get_line(self):
return line
There are several things wrong with your code:
object)I hope the list is helpful and seen as as constructive criticism.
To help you see some more pythonic code, I have written a log reader for your data, which has no complex regular expression, nor any “getters” (which you could add if you really desire). There are further simplifications one could make (use of namedtuple for instance), but in the interest of clarity and education, I have kept things vanilla:
Which produces the output:
I really hope this helps you discover how much fun Python can be!