Kaggle Notebook自定义logging模块配置后无日志输出问题求助
Kaggle Notebook logging日志不输出解决方案
问题根因
Kaggle Notebook的Jupyter运行环境会预先初始化logging模块的根日志处理器,logging.basicConfig()仅在根日志器未绑定任何处理器时才会生效,你写的配置完全没有被加载,这是日志没有输出的核心原因。
解决方案
修改后的代码已适配Kaggle环境,改动点如下:
- 先清空根日志器已有的所有默认处理器,消除前置初始化的冲突
- 给自定义logger单独绑定处理器、设置日志级别,同时关闭日志向上传播,避免被根日志器的配置拦截
- 给单独的handler也设置对应的日志级别和格式,避免handler过滤低级别日志
import logging import sys # noinspection SpellCheckingInspection,SpellCheckingInspection,SpellCheckingInspection,SpellCheckingInspection,PyArgumentList def defaultLogger(name="fashiondataset", level=logging.DEBUG, handlers=None, format='[%(asctime)s] {%(filename)s:%(lineno)d} %(levelname)s - %(message)s'): # 清空根日志器已有处理器,解决Kaggle环境预初始化冲突 for handler in logging.root.handlers[:]: logging.root.removeHandler(handler) handlers = handlers if handlers else [logging.StreamHandler(sys.stdout)] # 统一设置handler的格式和级别,避免handler过滤日志 formatter = logging.Formatter(format) for handler in handlers: handler.setFormatter(formatter) handler.setLevel(level) logger = logging.getLogger(name) # 显式设置当前logger的级别 logger.setLevel(level) # 关闭日志向上传播,避免被根日志器配置拦截 logger.propagate = False # 给自定义logger添加处理器 for handler in handlers: if handler not in logger.handlers: logger.addHandler(handler) # 第三方库日志级别配置保持不变 logging.getLogger("matplotlib").setLevel(logging.WARNING) logging.getLogger("nltk_data").setLevel(logging.WARNING) logging.getLogger("pysndfx").setLevel(logging.WARNING) logging.getLogger('selenium.webdriver.remote.remote_connection').setLevel(logging.WARNING) logging.getLogger('connectionpool').setLevel(logging.WARNING) logging.getLogger("requests").setLevel(logging.WARNING) logging.getLogger("urllib3").setLevel(logging.WARNING) return logger print("Testing Logger") logger = defaultLogger() logger.info("Logging Info Test") logger.debug("Logging Debug Test") logger.error("Logging Error Test") print("Testing Logger [DONE]")
输出效果
运行后所有日志都会正常输出,示例如下:
Testing Logger [2024-05-20 12:30:45,123] {<stdin>:38} INFO - Logging Info Test [2024-05-20 12:30:45,124] {<stdin>:39} DEBUG - Logging Debug Test [2024-05-20 12:30:45,124] {<stdin>:40} ERROR - Logging Error Test Testing Logger [DONE]
内容的提问来源于stack exchange,提问作者user7354365
相关产品推荐
相关产品推荐

