让我描述以下情况:
我在一些项目中使用了我自己的模块。该模块包含类和其他子模块(同样是我自己的)。
我想在模块及其子文件中编写日志消息,但在每个项目中导入模块时将logger对象作为参数。
我使用的所有记录器都有类似的界面(相同的mthods等...)。
有没有办法实现这个概念?
提前致谢!
答案 0 :(得分:1)
您可以使用基于记录器ID返回所需记录器的通用函数,而不是将logger对象作为参数传递给模块。这是日志系统在标准Python logging模块中实现的方式。
logging.getLogger(name=None)
(link)用于根据给定名称获取记录器对象。通常name
是模块名称:logger = logging.getLogger(__name__)
。
如果您不想使用标准logging
,您至少可以在项目中使用此概念。
在记录模块中:
loggers = {}
def get_logger(name):
if name not in loggers:
loggers[name] = Logger() # create logger instance for name
return loggers[name]
在项目中:
import get_logger # use this function in projects to get logger instances
logger = get_logger("project 1 logger id") # in project 1
logger = get_logger("project 2 logger id") # in project 2