-
Notifications
You must be signed in to change notification settings - Fork 0
/
logger.py
68 lines (52 loc) · 1.78 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
import os
import time
class Logger:
# constants
_INFO = 1
_WARNING = 2
_ERROR = 4
_DEBUG = 8
NORMAL = _INFO | _WARNING | _ERROR
ALL = _DEBUG | NORMAL
# log prefixes
_level = {}
_level[_DEBUG] = "DEBUG ?"
_level[_INFO] = "INFO :"
_level[_WARNING] = "WARNING !!"
_level[_ERROR] = "ERROR ##"
# default logging level
level = NORMAL
# if true, every log message will be printed out too
echo = False
""" Logs to a specific file
:param logname: A string that will be used to create
the ./logs/logname.log file
"""
def __init__(self, logname):
basepath = os.path.dirname(os.path.realpath(__file__))
logpath = basepath + "/logs/"
os.makedirs(logpath, exist_ok = True)
filename = logpath + logname + ".log"
self._file = open(filename, "a", 1, encoding = "utf-8")
# actual writing member
def __write(self, level, *msg):
if level & self.level:
leveltext = self._level[level]
msg = " ".join(str(m) for m in msg)
if self.echo:
print(leveltext, msg, flush = True)
date = time.strftime("%Y-%m-%d %H:%M:%S")
msg = " ".join((date, leveltext, msg, "\n"))
self._file.write(msg)
# shorthand for Logger.info()
def __call__(self, *msg):
self.__write(self._INFO, *msg)
# proxy members
def info(self, *msg):
self.__write(self._INFO, *msg)
def error(self, *msg):
self.__write(self._ERROR, *msg)
def warning(self, *msg):
self.__write(self._WARNING, *msg)
def debug(self, *msg):
self.__write(self._DEBUG, *msg)