为什么脚本具有:
import logging
logger = logging.getLogger(__name__)
logger.warning("warning message")
即使没有处理程序,也会向stderr发出消息吗?随后致电:
logger.setLevel(logging.DEBUG)
logger.info("info_message")
除非我先附加一个处理程序,否则不会记录任何内容。检查了层次结构,该记录器的父级是没有处理程序的根。
答案 0 :(得分:0)
因为有一个logging.lastResort
处理程序
通过此属性可以使用
handler of last resort
。这个 是以警告级别写入sys.stderr的StreamHandler,并且 用于在没有任何日志记录的情况下处理日志记录事件 组态。最终结果是仅将消息打印到 sys.stderr。这将替换先前的错误消息,即“否 可以为记录器XYZ找到处理程序”。如果您需要更早 行为出于某种原因,可以将lastResort设置为None。3.2版中的新功能。
您未设置记录器的记录级别,因此为NOTSET
。它接受任何日志记录并传播到根记录器。
根记录器级别的默认级别为WARNING
,因此仅处理该级别的日志记录。
由于根目录中没有处理程序,因此使用lastResort
处理程序。