You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.0 KiB
73 lines
2.0 KiB
from loguru import logger
|
|
import os
|
|
from functools import wraps
|
|
from util.ConfigManager import myCongif
|
|
|
|
'''
|
|
@logger.catch() 异常捕获注解
|
|
----
|
|
TRACE 5
|
|
DEBUG 10
|
|
INFO 20
|
|
SUCCESS 25
|
|
WARNING 30
|
|
ERROR 40
|
|
CRITICAL 50
|
|
----
|
|
'''
|
|
#singleton--使用装饰器来保障单一实例的好处是能够动态加载,但线程不安全
|
|
def singleton(cls):
|
|
instances = {}
|
|
@wraps(cls)
|
|
def get_instance(*args, **kwargs):
|
|
if cls not in instances:
|
|
instances[cls] = cls(*args, **kwargs)
|
|
return instances[cls]
|
|
return get_instance
|
|
|
|
@singleton
|
|
class LogHandler():
|
|
def __init__(self, log_dir=myCongif.get_data('log_dir')):
|
|
# 确保日志目录存在
|
|
if not os.path.exists(log_dir):
|
|
os.makedirs(log_dir)
|
|
# 清除所有以前的处理器
|
|
logger.remove()
|
|
# 配置控制台输出
|
|
logger.add(lambda msg: print(msg, end=""),
|
|
format="{time:YYYY-MM-DD_HH:mm:ss}-{extra[caller]}-{level}:{message}",
|
|
level=myCongif.get_data('show_log_level'))
|
|
# 配置文件输出
|
|
logger.add("logs/{time:YYYY-MM-DD}.log", rotation="00:00", retention="90 days",
|
|
format="{time:YYYY-MM-DD_HH:mm:ss}-{extra[caller]}-{level}:{message}",
|
|
level=myCongif.get_data('file_log_level'))
|
|
|
|
def get_logger(self, caller):
|
|
# 返回一个带有调用者信息的logger
|
|
return logger.bind(caller=caller)
|
|
|
|
# 示例类A
|
|
class ClassA:
|
|
def __init__(self):
|
|
self.logger = LogHandler().get_logger("ClassA")
|
|
|
|
def do_something(self):
|
|
self.logger.warning("ClassA is doing something.")
|
|
|
|
|
|
# 示例类B
|
|
class ClassB:
|
|
def __init__(self):
|
|
self.logger = LogHandler().get_logger("ClassB")
|
|
|
|
def do_something(self):
|
|
self.logger.error("ClassB is doing something.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
a = ClassA()
|
|
b = ClassB()
|
|
r = myCongif.get_data('url')
|
|
print(r)
|
|
a.do_something()
|
|
b.do_something()
|