105 lines
2.6 KiB
Python
105 lines
2.6 KiB
Python
import sys
|
|
import codecs
|
|
from traceback import format_exc
|
|
from appPublic.timeUtils import timestampstr
|
|
from appPublic.Singleton import SingletonDecorator
|
|
import inspect
|
|
|
|
def my_function():
|
|
frame_info = inspect.currentframe()
|
|
caller_frame = frame_info.f_back
|
|
file_name = inspect.getframeinfo(caller_frame).filename
|
|
line_number = inspect.getframeinfo(caller_frame).lineno
|
|
print(f"Called from file: {file_name}, line: {line_number}")
|
|
|
|
|
|
@SingletonDecorator
|
|
class MyLogger:
|
|
levels={
|
|
"client":7,
|
|
"info":6,
|
|
"debug":5,
|
|
"warning":4,
|
|
"error":3,
|
|
"exception":2,
|
|
"critical":1
|
|
}
|
|
formater='%(timestamp)s[%(name)s][%(levelname)s][%(filename)s:%(lineno)s]%(message)s\n'
|
|
def __init__(self, name, levelname='debug', logfile=None):
|
|
self.name = name
|
|
self.levelname = levelname
|
|
self.level = self.levels.get(levelname)
|
|
self.logfile = logfile
|
|
|
|
def open_logger(self):
|
|
if self.logfile:
|
|
self.logger = codecs.open(self.logfile, 'a', 'utf-8')
|
|
else:
|
|
self.logger = sys.stdout
|
|
|
|
def close_logger(self):
|
|
if self.logfile:
|
|
self.logger.close();
|
|
self.logger = None
|
|
self.logger = None
|
|
|
|
def log(self, levelname, message, frame_info):
|
|
caller_frame = frame_info.f_back
|
|
filename = inspect.getframeinfo(caller_frame).filename
|
|
lineno = inspect.getframeinfo(caller_frame).lineno
|
|
level = self.levels.get(levelname)
|
|
if level > self.level:
|
|
print(f'{level=},{self.level=}')
|
|
return
|
|
data = {
|
|
'timestamp':timestampstr(),
|
|
'name':self.name,
|
|
'levelname':levelname,
|
|
'message':message,
|
|
'filename':filename,
|
|
'lineno':lineno
|
|
}
|
|
self.open_logger()
|
|
s = self.formater % data
|
|
self.logger.write(s)
|
|
self.logger.flush()
|
|
self.close_logger()
|
|
|
|
def client(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('client', message, frame_info)
|
|
|
|
def info(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('info', message, frame_info)
|
|
|
|
def debug(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('debug', message, frame_info)
|
|
|
|
def warning(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('warning', message, frame_info)
|
|
|
|
def error(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('error', message, frame_info)
|
|
|
|
def critical(message):
|
|
frame_info = inspect.currentframe()
|
|
logger = MyLogger('Test')
|
|
logger.log('critical', message, frame_info)
|
|
|
|
def exception(message):
|
|
frame_info = inspect.currentframe()
|
|
tb_msg = format_exc()
|
|
msg = f'{message}\n{tb_msg}'
|
|
logger = MyLogger('exception')
|
|
logger.log('exception', msg, frame_info)
|
|
|