如何仅禁用Python中INFO日志文件的日志输出?
问题分析与解决方案
问题根源
你当前使用logging.disable(logging.ERROR)是全局日志禁用设置,它会阻止所有级别≤ERROR的日志输出。由于屏幕日志的handler级别是INFO(属于≤ERROR的范围),所以屏幕日志也被一并禁用了,这和你只想禁用INFO日志文件的需求不符。
正确解决方案
不要使用全局禁用,而是直接定位到记录INFO日志的file1 handler,将其从root logger中移除即可。同时要调整代码执行顺序,确保先加载日志配置,再进行handler的移除操作。
修改后的bot.py代码
import logging LOG_INFO_DISABLE = 1 # 根据实际需求设置开关值 logger = logging.getLogger(__name__) # ... 其他业务代码 ... if __name__ == '__main__': import logging.config logging.config.fileConfig('logging.conf') # 仅禁用INFO日志文件的逻辑 if LOG_INFO_DISABLE == 1: root_logger = logging.getLogger() # 遍历handler副本,避免修改原列表时引发异常 for handler in root_logger.handlers[:]: # 通过handler类型和日志文件名定位到info.log的handler if isinstance(handler, logging.handlers.TimedRotatingFileHandler): if 'info.log' in handler.baseFilename: root_logger.removeHandler(handler) handler.close() # 关闭文件句柄,释放资源
说明
- 调整执行顺序:先加载日志配置,确保所有handler初始化完成后,再进行移除操作。
- 精准定位目标:通过
TimedRotatingFileHandler类型和info.log文件名,准确找到要禁用的日志文件handler,不会影响屏幕输出和ERROR日志文件。 - 释放资源:移除handler后关闭文件句柄,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Adriano Meis
相关产品推荐
相关产品推荐

