You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:36:07