Skip to content

Commit 826710e

Browse files
committed
update: logging.py
1 parent 596ad4e commit 826710e

1 file changed

Lines changed: 115 additions & 66 deletions

File tree

code/logging.py

Lines changed: 115 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -30,140 +30,189 @@
3030
import ql_fs
3131
import _thread
3232

33+
__all__ = [
34+
"CRITICAL", "FATAL", "ERROR", "WARNING", "WARN", "INFO", "DEBUG", "NOTSET",
35+
"Logger", "getLogger", "setLogFile", "setSaveLog", "getSaveLog", "setLogLevel",
36+
"getLogLevel", "setLogDebug", "getLogDebug",
37+
]
38+
3339
_LOG_LOCK = _thread.allocate_lock()
34-
_LOG_LEVEL_CODE = {
35-
"debug": 0,
36-
"info": 1,
37-
"warn": 2,
38-
"error": 3,
39-
"critical": 4,
40+
41+
CRITICAL = 50
42+
FATAL = CRITICAL
43+
ERROR = 40
44+
WARNING = 30
45+
WARN = WARNING
46+
INFO = 20
47+
DEBUG = 10
48+
NOTSET = 0
49+
50+
_levelToName = {
51+
CRITICAL: 'CRITICAL',
52+
ERROR: 'ERROR',
53+
WARNING: 'WARNING',
54+
INFO: 'INFO',
55+
DEBUG: 'DEBUG',
56+
NOTSET: 'NOTSET',
57+
}
58+
59+
_nameToLevel = {
60+
'CRITICAL': CRITICAL,
61+
'FATAL': FATAL,
62+
'ERROR': ERROR,
63+
'WARNING': WARNING,
64+
'WARN': WARN,
65+
'INFO': INFO,
66+
'DEBUG': DEBUG,
67+
'NOTSET': NOTSET,
4068
}
4169

42-
_log_dict = {}
43-
_log_path = "/usr/log/"
44-
_log_name = "pigeon_tracker.log"
45-
_log_file = _log_path + _log_name
46-
_log_save = False
47-
_log_size = 0x8000
48-
_log_back = 8
49-
_log_level = "debug"
50-
_log_debug = True
70+
_LOG_DICT = {}
71+
_LOG_PATH = "/usr/"
72+
_LOG_NAME = "project.log"
73+
_LOG_FILE = _LOG_PATH + _LOG_NAME
74+
_LOG_SAVE = False
75+
_LOG_SIZE = 0x8000
76+
_LOG_BACK = 8
77+
_LOG_LEVEL = DEBUG
78+
_LOG_DEBUG = True
5179

5280

5381
class Logger:
5482
def __init__(self, name):
5583
self.__name = name
84+
self.__file = None
85+
86+
def __open_log(self):
87+
global _LOG_FILE
88+
if not self.__file:
89+
self.__file = open(_LOG_FILE, "wb")
90+
91+
def __close_log(self):
92+
if self.__file:
93+
self.__file.close()
94+
self.__file = None
95+
96+
def __write_log(self, msg):
97+
if self.__file:
98+
self.__file.write(msg)
99+
self.__file.flush()
56100

57101
def __save_log(self, msg):
58-
global _log_path
59-
global _log_file
60102
try:
103+
msg += "\n" if not msg.endswith("\n") else ""
61104
log_size = 0
62-
if not ql_fs.path_exists(_log_path):
63-
uos.mkdir(_log_path[:-1])
64-
if ql_fs.path_exists(_log_file):
65-
log_size = ql_fs.path_getsize(_log_file)
66-
if log_size + len(msg) >= _log_size:
67-
for i in range(_log_back, 0, -1):
68-
bak_file = _log_file + "." + str(i)
105+
if not ql_fs.path_exists(_LOG_PATH):
106+
uos.mkdir(_LOG_PATH[:-1])
107+
if ql_fs.path_exists(_LOG_FILE):
108+
log_size = ql_fs.path_getsize(_LOG_FILE)
109+
if log_size + len(msg) >= _LOG_SIZE:
110+
self.__close_log()
111+
for i in range(_LOG_BACK, 0, -1):
112+
bak_file = _LOG_FILE + "." + str(i)
69113
if ql_fs.path_exists(bak_file):
70-
if i == _log_back:
114+
if i == _LOG_BACK:
71115
uos.remove(bak_file)
72116
else:
73-
uos.rename(bak_file, _log_file + "." + str(i + 1))
74-
uos.rename(_log_file, _log_file + ".1")
75-
with open(_log_file, "a") as lf:
76-
lf.write(msg)
117+
uos.rename(bak_file, _LOG_FILE + "." + str(i + 1))
118+
uos.rename(_LOG_FILE, _LOG_FILE + ".1")
119+
self.__open_log()
120+
self.__write_log(msg)
77121
except Exception as e:
78122
sys.print_exception(e)
79123

80124
def __log(self, level, *message):
81-
global _log_save
82125
with _LOG_LOCK:
83-
if _log_debug is False:
84-
if _log_level == "debug" and level == "debug":
85-
return
86-
if _LOG_LEVEL_CODE.get(level) < _LOG_LEVEL_CODE.get(_log_level):
87-
return
126+
if _LOG_DEBUG is False and ((_LOG_LEVEL == level == DEBUG) or level < _LOG_LEVEL):
127+
return
88128
_time = "{}-{:02d}-{:02d} {:02d}:{:02d}:{:02d}".format(*utime.localtime())
89-
msg = "[{}][{}][{}]".format(_time, self.__name, level)
129+
msg = "[{}][{}][{}]".format(_time, self.__name, _levelToName[level])
90130
print(msg, *message)
91-
if _log_save:
131+
if _LOG_SAVE:
92132
msg = msg + " " + " ".join(message) if message else msg
93133
self.__save_log(msg)
94134

95135
def critical(self, *message):
96-
self.__log("critical", *message)
136+
self.__log(CRITICAL, *message)
137+
138+
def fatal(self, *message):
139+
self.critical(*message)
97140

98141
def error(self, *message):
99-
self.__log("error", *message)
142+
self.__log(ERROR, *message)
143+
144+
def warning(self, *message):
145+
self.__log(WARNING, *message)
100146

101147
def warn(self, *message):
102-
self.__log("warn", *message)
148+
self.warning(*message)
103149

104150
def info(self, *message):
105-
self.__log("info", *message)
151+
self.__log(INFO, *message)
106152

107153
def debug(self, *message):
108-
self.__log("debug", *message)
154+
self.__log(DEBUG, *message)
109155

110156

111157
def getLogger(name):
112-
global _log_dict
113-
if not _log_dict.get(name):
114-
_log_dict[name] = Logger(name)
115-
return _log_dict[name]
158+
global _LOG_DICT
159+
if not _LOG_DICT.get(name):
160+
_LOG_DICT[name] = Logger(name)
161+
return _LOG_DICT[name]
116162

117163

118164
def setLogFile(path, name):
119-
global _log_path, _log_name, _log_file
165+
global _LOG_PATH, _LOG_NAME, _LOG_FILE
120166
if not path.endswith("/"):
121167
path += "/"
122-
_log_path = path
123-
_log_name = name
124-
_log_file = _log_path + _log_name
168+
_LOG_PATH = path
169+
_LOG_NAME = name
170+
_LOG_FILE = _LOG_PATH + _LOG_NAME
125171
return 0
126172

127173

128174
def setSaveLog(save, size=None, backups=None):
129-
global _log_save, _log_size, _log_back
175+
global _LOG_SAVE, _LOG_SIZE, _LOG_BACK
130176
if not isinstance(save, bool):
131177
return (1, "save is not bool.")
132-
_log_save = save
133-
if _log_save:
178+
_LOG_SAVE = save
179+
if _LOG_SAVE:
134180
if not isinstance(size, int):
135181
return (2, "size is not int.")
136-
_log_size = size
182+
_LOG_SIZE = size
137183
if not isinstance(backups, int):
138184
return (3, "backups is not int.")
139-
_log_back = backups
185+
_LOG_BACK = backups
140186
return (0, "success.")
141187

142188

143189
def getSaveLog():
144-
return _log_save
190+
return _LOG_SAVE
145191

146192

147193
def setLogLevel(level):
148-
global _log_level
149-
level = level.lower()
150-
if level not in _LOG_LEVEL_CODE.keys():
151-
return False
152-
_log_level = level
153-
return True
194+
global _LOG_LEVEL
195+
level = level.upper()
196+
if _nameToLevel.get(level) is not None:
197+
_LOG_LEVEL = _nameToLevel.get(level)
198+
return True
199+
if _levelToName.get(level) is not None:
200+
_LOG_LEVEL = level
201+
return True
202+
return False
154203

155204

156205
def getLogLevel():
157-
return _log_level
206+
return _levelToName.get(_LOG_LEVEL)
158207

159208

160209
def setLogDebug(debug):
161-
global _log_debug
210+
global _LOG_DEBUG
162211
if isinstance(debug, bool):
163-
_log_debug = debug
212+
_LOG_DEBUG = debug
164213
return True
165214
return False
166215

167216

168217
def getLogDebug():
169-
return _log_debug
218+
return _LOG_DEBUG

0 commit comments

Comments
 (0)