繁体   English   中英

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

[英]How to log from multiple modules python logging

我正在使用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()

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')

记录器按名称分层组织。 记录日志消息后,它将遍历记录器以查找处理程序,从记录消息的记录器开始,向上移动层次结构。 层次结构遵循名称,因此,由于您是按模块名称命名记录器,因此记录到模块“ xyz”的消息将首先尝试查找附加到“ xyz”,然后是“ xy”,“ 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模块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM