如何为根日志器与pypsexec模块设置不同日志级别
如何保留自身INFO日志并屏蔽pypsexec的低级别日志?
要实现你的需求,核心是正确控制pypsexec命名空间下所有日志器的级别,同时阻止其日志传播到根日志器。之前的尝试无效,大概率是因为没有拿到pypsexec的根日志器,且未关闭日志传播。
解决方案代码
import logging # 获取pypsexec的根日志器(覆盖所有子模块的日志配置) psexec_logger = logging.getLogger("pypsexec") # 设置仅输出WARNING及以上级别日志 psexec_logger.setLevel(logging.WARNING) # 禁止pypsexec的日志传播到根日志器 psexec_logger.propagate = False
为什么之前的方法无效?
- pypsexec内部各个模块通常使用
logging.getLogger(__name__)创建日志器,这些日志器都属于pypsexec命名空间的子日志器,会继承根日志器的配置。你之前导入的pypsexec.client.log只是单个模块的日志实例,无法覆盖整个库的日志行为。 - 如果不关闭
propagate,即使设置了pypsexec日志器的级别,它仍会将日志传递给根日志器。若你的根日志器级别是INFO,这些低级别日志还是会被根日志器输出。
验证方法
可以打印所有pypsexec相关日志器的配置,确认设置生效:
for logger_name in logging.Logger.manager.loggerDict: if logger_name.startswith("pypsexec"): logger = logging.getLogger(logger_name) print(f"Logger: {logger_name}, Level: {logging.getLevelName(logger.level)}, Propagate: {logger.propagate}")
注意事项
确保你的根日志器级别保持为logging.INFO,这样自身代码的INFO级日志会正常输出,不受pypsexec配置的影响。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

