-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlogging.py
72 lines (54 loc) · 2.22 KB
/
logging.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
from datetime import datetime
import inspect
import ultraprint.common as p
class logger:
def __init__(self, name, filename=None, include_extra_info=False, write_to_file=True, log_level='INFO'):
self.name = name
self.include_extra_info = include_extra_info
self.write_to_file = True
if filename:
self.filename = filename
else:
self.filename = f'{name}.log'
self.log_levels = {
'DEBUG': 0,
'INFO': 1,
'SUCCESS': 2,
'WARNING': 3,
'ERROR': 4,
'CRITICAL': 5
}
self.current_log_level = self.log_levels[log_level]
def set_log_level(self, log_level = 'INFO'):
self.current_log_level = self.log_levels[log_level]
def set_write_to_file(self, write_to_file):
self.write_to_file = write_to_file
def _get_extra_info(self):
frame = inspect.currentframe().f_back.f_back
info = inspect.getframeinfo(frame)
return f'{info.filename}:{info.function}:{info.lineno}'
def _log(self, level, msg, color_func):
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
extra_info = self._get_extra_info() if self.include_extra_info else ''
if self.include_extra_info:
extra_info = self._get_extra_info()
formatted_msg = f'[{current_time}] [{level}] [{self.name}] {msg} [{extra_info}]'
else:
formatted_msg = f'[{current_time}] [{level}] [{self.name}] {msg}'
if self.log_levels[level] >= self.current_log_level:
color_func(formatted_msg)
if self.write_to_file:
with open(self.filename, 'a') as f:
f.write(f'{formatted_msg}\n')
def info(self, msg):
self._log('INFO', msg, p.cyan)
def error(self, msg):
self._log('ERROR', msg, p.red)
def warning(self, msg):
self._log('WARNING', msg, p.yellow)
def success(self, msg):
self._log('SUCCESS', msg, p.green)
def debug(self, msg):
self._log('DEBUG', msg, p.dgray)
def critical(self, msg):
self._log('CRITICAL', msg, p.red_bg)