如何从多个模块python日志记录

如何从多个模块python日志记录,python,python-3.x,python-2.7,Python,Python 3.x,Python 2.7,我使用RotatingFilehandler保留5个文件作为备份。但它并没有记录来自除主模块之外的所有模块的消息 basicconfig正在工作,但它只创建一个文件 log_check.py: import ll import logChk import logging from logging.handlers import RotatingFileHandler LOG_FILENAME = 'check.log' logger = logging.getLogger(__name__)

我使用RotatingFilehandler保留5个文件作为备份。但它并没有记录来自除主模块之外的所有模块的消息

basicconfig正在工作,但它只创建一个文件

log_check.py:

import ll
import logChk

import logging
from logging.handlers import RotatingFileHandler

LOG_FILENAME = 'check.log'
logger = logging.getLogger(__name__)
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ %(name)s.%(funcName)s:%(lineno)d] - %(message)s")
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)


logger = logging.getLogger(__name__)

def foo():
    logger.warning("logging from d on call foo()")

if __name__ == "__main__":

    logger.info('Starting logger for...')

    logger.warning('logging from c')
    foo()
    logChk.doo()
    ll.fun()
L.py:

import logging
import log_conf
logger=logging.getLogger(__name__)

def fun():
    logger.info("In Fun")
logChk.py:

import logging

logger = logging.getLogger(__name__)

def doo():
    logger.info('Starting logger for... in dooo')

伐木工人按姓名按等级组织。记录日志消息时,它将遍历记录器以查找处理程序,从记录消息的记录器开始,向上移动层次结构。 层次结构遵循名称,因此,由于您是通过模块名称命名记录器,因此记录到模块“x.y.z”的消息将首先尝试查找附加到“x.y.z”的处理程序,然后是“x.y”、“x”,最后是根记录器“”

因此,要记录所有消息(正如您通常希望的那样),您需要向根日志记录器而不是模块日志记录器添加一个处理程序

LOG_FILENAME = 'check.log'
rootlogger = logging.getLogger() # No name here will return you the root logger
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ % (name)s.%(funcName)s:%(lineno)d] - %(message)s")
rootlogger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
rootlogger.addHandler(handler)

要管理日志记录配置,我建议您不要手动设置处理程序和格式化程序,而是使用模块。

日志记录程序按名称分层组织。记录日志消息时,它将遍历记录器以查找处理程序,从记录消息的记录器开始,向上移动层次结构。 层次结构遵循名称,因此,由于您是通过模块名称命名记录器,因此记录到模块“x.y.z”的消息将首先尝试查找附加到“x.y.z”的处理程序,然后是“x.y”、“x”,最后是根记录器“”

因此,要记录所有消息(正如您通常希望的那样),您需要向根日志记录器而不是模块日志记录器添加一个处理程序

LOG_FILENAME = 'check.log'
rootlogger = logging.getLogger() # No name here will return you the root logger
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ % (name)s.%(funcName)s:%(lineno)d] - %(message)s")
rootlogger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
rootlogger.addHandler(handler)

要管理日志记录配置,我建议您不要手动设置处理程序和格式化程序,而是使用模块。

它不会记录来自除主模块之外的所有模块的消息。
在编写本文时,在您的代码段中,我看不到任何对
main
模块的引用。你能添加它或者适当地调整你的模块名称吗?你用python2.7和python3.x标记了这个问题-你在使用哪一个,您没有指定?请查看文档和
禁用现有的\u记录器上的引用,看看这是否是您的目的:
它没有记录来自除主模块以外的所有模块的消息。
在编写本文时,我在您的代码段中没有看到任何对
模块的引用。你能添加它或适当地调整你的模块名称吗?你用python2.7和python3.x标记了这个问题-你使用的是哪一个,你没有指定?查看文档和
禁用现有的\u记录器
上的参考,看看这是不是让你: