-
Notifications
You must be signed in to change notification settings - Fork 0
/
Logger.py
87 lines (71 loc) · 2.94 KB
/
Logger.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
"""
Author: Abhijit Annaldas
GitHub: http://github.com/avannaldas/PythonLogger
"""
import datetime
class Logger:
"""
Standard output printing helper which prefixes useful info with message.
Can be used with long running operations to indicate progress/running time.
All options can be configured through constructor and has sensible defaults.
"""
def __init__(self,
startTime=datetime.datetime.now(),
showDate=False,
showTime=True,
showTotalElapsed=False,
showElapsedSinceLastLog=True,
showLoggerInitMessage=True,
addLineBreaks=False,
returnLogStringInstead=False,
referenceId="NA"):
self.startTime = startTime
self.showDate = showDate
self.showTime = showTime
self.showTotalElapsed = showTotalElapsed
self.showElapsedSinceLastLog = showElapsedSinceLastLog
self.previousLogTime = startTime
self.referenceId = referenceId
self.addLineBreaks = addLineBreaks
self.returnLogStringInstead = returnLogStringInstead
self.eventsDict = { }
if(showLoggerInitMessage):
print(self.getLogString("Logger initialized"))
def getLogString(self, msg="", eventName="", elapsed=None):
now = datetime.datetime.now()
msgStr = ""
if(self.referenceId != "NA"):
msgStr = "[ReferenceId:" + self.referenceId + "]:"
if(self.showDate == True and self.showTime == False):
msgStr = msgStr + '[' + now.strftime("%d-%m-%Y") + ']:'
elif(self.showDate == False and self.showTime == True):
msgStr = msgStr + '[' + now.strftime("%H:%M:%S") + ']:'
elif (self.showDate and self.showTime):
msgStr = msgStr + '[' + now.strftime("%d-%m-%Y %H:%M:%S") + ']:'
if(self.showTotalElapsed):
msgStr = msgStr + '[Total Elapsed Seconds:' + str(int((now - self.startTime).total_seconds())) + ']:'
if(elapsed is None and self.showElapsedSinceLastLog):
msgStr = msgStr + '[Elapsed Seconds (diff):' + str(int((now - self.previousLogTime).total_seconds())) + ']:'
elif(elapsed is not None):
msgStr = msgStr + '[Elapsed Seconds:' + elapsed + ']:'
self.previousLogTime = now
if(eventName is not None and len(eventName)>0):
msgStr = msgStr + '[Event:' + eventName + ']:'
if(self.addLineBreaks):
msgStr = msgStr + "\n"
return (msgStr + msg)
def log(self, msg="", eventName="", elapsed=None):
if(self.returnLogStringInstead):
return self.getLogString(msg, eventName, elapsed)
print(self.getLogString(msg, eventName, elapsed))
def logStartEvent(self, name):
self.eventsDict[name] = datetime.datetime.now()
return self.log("Event started.", name)
def logEndEvent(self, name):
now = datetime.datetime.now()
if (name in self.eventsDict):
startEvent = self.eventsDict[name]
del self.eventsDict[name]
return self.log("Event complete.", name, str(int((now - startEvent).total_seconds())))
else:
return self.log("Event complete, logStartEvent() not called or logEndEvent() already called.", name)