python重写getLogger()

python重写getLogger(),python,python-3.x,logging,Python,Python 3.x,Logging,在我的模块中,我有: import logging import my_module_name.log log = logging.getLogger(__name__) 这很好,但我希望能够覆盖/log.py中的logging.getLogger(),以便使用: import my_module_name.log log = my_module_name.log.getLogger(__name__) 如果您想要一个配置文件,您有两个选项。有基于ini文件的配置、基于dict配置和基于代码

在我的
模块中,我有:

import logging
import my_module_name.log
log = logging.getLogger(__name__)
这很好,但我希望能够覆盖/log.py中的logging.getLogger(),以便使用:

import my_module_name.log
log = my_module_name.log.getLogger(__name__)

如果您想要一个配置文件,您有两个选项。有基于ini文件的配置、基于dict配置和基于代码的配置。我将在这里解释基于dict的配置

在某个文件中定义日志配置

logging_config = dict(
    version = 1,
    formatters = {
        'f': {'format':
              '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'}
        },
    handlers = {
        'h': {'class': 'logging.StreamHandler',
              'formatter': 'f',
              'level': logging.DEBUG}
        },
    root = {
        'handlers': ['h'],
        'level': logging.DEBUG,
        },
)
然后,当您想在代码中记录某些内容时,只需实例化一个logger对象

import logging
from logging.config import dictConfig
import logging_config   # defined above so import accordingly
dictConfig(logging_config)

logger = logging.getLogger()  # you have a logger ready. Use it to log something
logger.debug("Its a log")

有两个getLogger函数,一个是您正在使用的模块级函数。第二个是类级别,它是logging.Manager类的一部分。你想覆盖哪一个?。我猜您不想重写模块级getLogger,因为它只是一个实用函数,您将无法使用它做很多事情it@ArpitSolanki我喜欢在一个文件中定义所有日志记录。使本地日志记录配置变得更加困难。这方面的任何最佳实践都将是非常好的。在类的深处发现了一个本地配置,如果省略了
导入日志记录
,这将被阻止。我们可以在此添加自定义字段吗?