尝试使用日志记录和多模块。
要求是有一个自定义日志类,除了其他方法之外,它还能够使用一些方法记录事件。
我宁愿不使用装饰品。
logger.py 是一个普通文件,将被许多其他文件(模块)导入。
module.py 就是这样一个单一的模块(见下面的代码)。
运行module.py时,输出为:
2023-05-12 01:17:55,682 DEBUG -= MSG =- (logger.py:debug:24)
一些非记录器打印:RPT
因为我运行的是 module.py 而不是 logger.py,所以我希望第一行是:
2023-05-12 01:17:55,682 DEBUG -= MSG =- (module.py:my_func_1:5)
模块.py
from logger import Log, get_module_logger
logger = get_module_logger(__name__)
log = Log(logger)
def my_func_1():
log.debug("-= MSG =-")
log.report("RPT")
my_func_1()
记录器.py
import logging
def get_module_logger(mod_name):
logger = logging.getLogger(mod_name)
handler = logging.StreamHandler()
formatter = logging.Formatter(
'%(asctime)s %(levelname)-8s %(message)s (%(filename)s:%(funcName)s:%(lineno)d)')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
return logger
class Log():
def __init__(self, logger):
self.logger = logger
def report(self, msg):
print(f"some none-logger printing: {msg}")
def debug(self, msg):
self.logger.debug(msg)
您将记录器包装在
Log
类中并在self.logger.debug(msg)
中调用logger.py
,这意味着调用debug()
函数的行在logger.py
中,而不是module.py
中,因此为什么logger.py
被记录为文件名。