如何从多个模块进行Python日志记录

2024-04-24 09:26:55 发布

您现在位置:Python中文网/ 问答频道 /正文

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

basicconfig正在工作,但它只创建一个文件。你知道吗

日志_支票.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()

你知道吗ll.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')

Tags: 模块文件namefrompyimportinfofoo
1条回答
网友
1楼 · 发布于 2024-04-24 09:26:55

伐木工人是按名字分层组织的。当日志消息被记录时,它将遍历记录器以查找处理程序,从您记录消息的记录器开始,向上移动层次结构。 层次结构遵循名称,因此由于您是按模块名称命名记录器,因此记录到模块“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)

为了管理日志配置,我建议您不要手动设置处理程序和格式化程序,而是使用logging.config模块。你知道吗

相关问题 更多 >