为何Tornado日志器默认附带StreamHandler?及如何阻止其日志输出至控制台
关于Python logging模块中tornado日志器的异常行为及解决方案
为什么未导入tornado时,logging.getLogger("tornado")已有StreamHandler?
这个现象大概率和你使用的Spyder环境有关——Spyder本身的部分功能(比如交互式内核、Web服务组件)依赖于tornado库,在Spyder启动时,后台已经悄悄加载了tornado相关模块,进而初始化了tornado命名空间的日志器。
当你调用logging.getLogger("tornado")时,实际上获取的是Spyder后台已经创建并配置过的日志器,它被默认添加了StreamHandler来输出到stderr。而hurricane是自定义的日志器名称,没有被任何预加载的模块初始化,所以返回空的handler列表,符合预期。
如何阻止Tornado日志输出到控制台?
你可以通过以下几种方式来实现:
直接移除现有handler:
如果你只是想清空tornado日志器的handler,直接调用clear()方法即可:import logging tornado_logger = logging.getLogger("tornado") tornado_logger.handlers.clear()禁用日志向上传播:
Tornado的日志默认会向上传播到root日志器,而root日志器默认带有StreamHandler。你可以关闭tornado日志器的传播属性,避免它的日志被root日志器处理:import logging tornado_logger = logging.getLogger("tornado") tornado_logger.propagate = False调整日志级别:
将tornado日志器的级别设置为一个极高的阈值(比如高于CRITICAL),这样所有低于该级别的日志都会被忽略:import logging tornado_logger = logging.getLogger("tornado") tornado_logger.setLevel(logging.CRITICAL + 1)提前配置日志器(推荐):
如果你计划后续导入tornado,可以在导入前就配置好tornado日志器,避免它被默认初始化:import logging # 先获取并配置tornado日志器 tornado_logger = logging.getLogger("tornado") tornado_logger.propagate = False # 之后再导入tornado import tornado
内容的提问来源于stack exchange,提问作者Joooeey
相关产品推荐
相关产品推荐

