导入模块时,将logger对象作为参数

时间:2016-03-27 07:26:30

标签: python logging import

让我描述以下情况:

我在一些项目中使用了我自己的模块。该模块包含类和其他子模块(同样是我自己的)。

我想在模块及其子文件中编写日志消息,但在每个项目中导入模块时将logger对象作为参数。

我使用的所有记录器都有类似的界面(相同的mthods等...)。

有没有办法实现这个概念?

提前致谢!

1 个答案:

答案 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