Python 日志记录 - 如何继承根记录器级别和处理程序



我是一个python newbie,试图实现登录我的代码。我有两个模块

main.pysubsodule.py

main.py

import logging
from logging.handlers import RotatingFileHandler
import submodule

import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.debug('DEBUG LEVEL - MAIN MODULE')
logger.info('INFO LEVEL - MAIN MODULE')
submodule.loggerCall()

subsodule.py

import logging
from logging.handlers import RotatingFileHandler

def loggerCall():
    logger = logging.getLogger(__name__)
#    logger.setLevel(logging.DEBUG)
    fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)
    logger.addHandler(fh)
    logger.debug('SUBMODULE: DEBUG LOGGING MODE : ')
    logger.info('Submodule: INFO LOG')
    return

我以为从我的子模块中称为getLogger的渴望,它应该继承日志级别&root Logger的处理程序详细信息。但是,就我而言,我必须在子模块中再次指定日志级别和处理程序以使它们打印到同一日志文件。

另外,如果我有很多方法和子模块中的课程。我该怎么做,而不必定义我的日志级别&再次处理器。

IDEA是根据主模块中的日志级别设置的同一日志中的单个日志文件。

在同一日志中打印。

这里的问题是您不是初始化root Logger;您正在初始化主模块的记录仪。

尝试以amain..py:

import logging
from logging.handlers import RotatingFileHandler
import submodule
logger = logging.getLogger()  # Gets the root logger
logger.setLevel(logging.DEBUG)
fh = RotatingFileHandler('master.log', maxBytes=2000000, backupCount=10)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
logger.debug('DEBUG LEVEL - MAIN MODULE')
logger.info('INFO LEVEL - MAIN MODULE')
submodule.loggerCall()

然后尝试以下subsodule.py:

def loggerCall():
    logger = logging.getLogger(__name__)
    logger.debug('SUBMODULE: DEBUG LOGGING MODE : ')
    logger.info('Submodule: INFO LOG')
    return

由于您说要将所有子模块中的日志消息发送到同一位置,因此应初始化根记录器,然后只需使用消息记录方法(以及setlevel()调用,请及时使用)。因为没有明确的处理程序,因此logging.getLogger(__name__)会将树横穿根部,在此处找到您在Main.py中建立的处理程序。

最新更新