This repository has been archived by the owner on Apr 6, 2023. It is now read-only.
/
logger.py
102 lines (89 loc) · 3.48 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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
import logging
import sys
import colorlog
import logging.handlers
import os
import time
import zipfile
import codecs
debugging = False
class TimedCompressedRotatingFileHandler(logging.handlers.TimedRotatingFileHandler):
# NOT ALL THE CODE IN THIS CLASS IS MINE
"""
Extended version of TimedRotatingFileHandler that compress logs on rollover.
"""
def doRollover(self):
"""
do a rollover; in this case, a date/time stamp is appended to the filename
when the rollover happens. However, you want the file to be named for the
start of the interval, not the current time. If there is a backup count,
then we have to get a list of matching filenames, sort them and remove
the one with the oldest suffix.
"""
self.stream.close()
# get the time that this sequence started at and make it a TimeTuple
t = self.rolloverAt - self.interval
timeTuple = time.localtime(t)
timeName = time.strftime(self.suffix, timeTuple)
dfn = "logs/" + timeName + ".log"
if os.path.exists(dfn):
os.remove(dfn)
os.rename(self.baseFilename, dfn)
#print "%s -> %s" % (self.baseFilename, dfn)
if self.encoding:
self.stream = codecs.open(self.baseFilename, 'w', self.encoding)
else:
self.stream = open(self.baseFilename, 'w')
self.rolloverAt = self.rolloverAt + self.interval
if os.path.exists(dfn + ".zip"):
os.remove(dfn + ".zip")
file = zipfile.ZipFile(dfn + ".zip", "w")
file.write(dfn, timeName + ".log", zipfile.ZIP_DEFLATED)
file.close()
os.remove(dfn)
class log:
def init():
if len(logging.getLogger("").handlers) > 1:
return
shandler = logging.StreamHandler(stream=sys.stdout)
shandler.setFormatter(colorlog.LevelFormatter(
fmt = {
"DEBUG": "{log_color}[{levelname}] {message}",
"INFO": "{log_color}[{levelname}] {message}",
"WARNING": "{log_color}[{levelname}] {message}",
"ERROR": "{log_color}[{levelname}] {message}",
"CRITICAL": "{log_color}[{levelname}] {message}"
},
log_colors = {
"DEBUG": "cyan",
"INFO": "white",
"WARNING": "yellow",
"ERROR": "red",
"CRITICAL": "bold_red"
},
style = "{",
datefmt = ""
))
shandler.setLevel(logging.DEBUG)
logging.getLogger(__package__).addHandler(shandler)
logging.getLogger(__package__).setLevel(logging.DEBUG)
def setupRotator(date_format, time_format):
if not os.path.exists("logs"):
os.mkdir("logs")
rotator = TimedCompressedRotatingFileHandler("logs/latest.log", "d", 1, encoding="UTF-8")
rotator.setFormatter(logging.Formatter("%(asctime)s [%(levelname)s] %(message)s", "{} {}".format(date_format, time_format)))
logging.getLogger(__package__).addHandler(rotator)
def enableDebugging():
global debugging
debugging = True
def debug(msg):
if debugging:
logging.getLogger(__package__).debug(msg)
def info(msg):
logging.getLogger(__package__).info(msg)
def warning(msg):
logging.getLogger(__package__).warning(msg)
def error(msg):
logging.getLogger(__package__).error(msg)
def critical(msg):
logging.getLogger(__package__).critical(msg)