[英]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.