当级别设置为logging.DEBUG时,为什么log.debug()不记录日志?

我期望以下代码会输出两条日志行

import logging

log = logging.getLogger('hello')
log.setLevel(logging.DEBUG)
print(log.getEffectiveLevel())
log.debug('debug log')
log.critical('critical log')

输出是

10
critical log

级别正确设置为10对应于DEBUG),尽管如此,却log.debug('debug log')没有输出任何内容 - 为什么?


jeck猫
浏览 355回答 3
3回答

桃花长相依

您尚未配置日志记录系统,因此它仍然使用默认值(根记录器的级别为 WARN)。https://docs.python.org/3/library/logging.html#logging.basicConfig说basicConfig通过使用默认格式化程序创建 StreamHandler 并将其添加到根记录器,对日志记录系统进行基本配置。首先配置日志系统basicConfig将创建您的记录器将使用的处理程序和格式化程序:logging.basicConfig() log = logging.getLogger('hello') log.setLevel(logging.DEBUG) print(log.getEffectiveLevel()) log.debug('debug log') log.critical('critical log')输出:10 DEBUG:hello:debug log CRITICAL:hello:critical log在Logger.callHandlers中,每个处理程序都会将日志记录的级别与其自身的级别进行比较。如果没有任何处理程序,它将使用默认的警告。

慕斯王

有了StreamHandler它就会将日志输出发送到流,例如 sys.stdout、sys.stderr 或任何类似文件的对象”根据文档import logging import sys# Initialize Logger and set Level to DEBUGlogger = logging.getLogger()logger.setLevel(logging.DEBUG)# Initialize a Handler to print to stdouthandler = logging.StreamHandler(sys.stdout)# Format Handler outputlogFormatter = logging.Formatter(    "%(asctime)s %(message)s", datefmt="%m/%d/%Y %I:%M:%S %p")handler.setFormatter(logFormatter)# Set Handler Level to DEBUGhandler.setLevel(logging.DEBUG)logger.addHandler(handler)logger.debug('Debug Info')>>> 09/19/2020 09:01:00 PM Debug Info

慕田峪9158850

您需要添加流处理程序import logginglog = logging.getLogger('hello')log.setLevel(logging.DEBUG)# # Create a file handler to store the logsfile_handler = logging.FileHandler('test.log')log.addHandler(file_handler)# # Send output to terminalstream_handler = logging.StreamHandler()log.addHandler(stream_handler)log.debug('debug log')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python