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

含父目录的日志文件未写入问题排查

Databricks日志文件无法生成问题排查与解决

我在Databricks的主笔记本中创建了根日志记录器,导入logger.py的配置并调用其他含日志记录器的模块。运行时控制台输出正常,但始终生成不了日志文件,相关代码如下:

主笔记本代码

# main notebook

import logging
from logger import get_logfile_name, configure_logger

NAME = 'job1'

from logger import (
    configure_logger,
    get_logfile_name, 
)

# Set up root logger
logger = logging.getLogger()
logfile = get_logfile_name(NAME)
logger = configure_logger(logger, logfile=logfile)

logger.py代码

import os
import logging
from dates import get_current_date
from source import project_log_dir


def get_logfile_name(name):
    # Get current date to append to file name
    formatted_date = get_current_date()
    logfile = f"{name}/{name}_{formatted_date}.log"
    return logfile


def configure_logger(logger, logfile, level=logging.DEBUG):
    logger.setLevel(level)

    logfile_output = os.path.join(project_log_dir, logfile)
    os.makedirs(os.path.dirname(logfile_output), exist_ok=True)

    if logfile:
        # Create a file handler with detailed formatting for log output
        file_handler = logging.FileHandler(logfile_output, mode="a")
        fformatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s: %(message)s')
        file_handler.setFormatter(fformatter)
        logger.addHandler(file_handler)

    # Create a stream handler with simple formatting for cell output
    stream_handler = logging.StreamHandler()
    sformatter = logging.Formatter('%(levelname)s: %(message)s')
    stream_handler.setFormatter(sformatter)
    logger.addHandler(stream_handler)

    # Remove random Pyspark logs
    logging.getLogger("py4j").setLevel(logging.ERROR)

    if logfile:
        logger.info(f'Logger initiated. Logs will be written to {logfile_output}')
    else:
        logger.info('Logger initiated.')

    return logger

其他模块代码

# other modules
import logging


logger = logging.getLogger(__name__)

运行时控制台能正常输出日志,但对应的日志文件始终没生成。

(图片显示控制台有日志输出记录,但找不到对应的日志文件)

可能的原因及解决方法

  • 路径权限与格式问题:Databricks中不能直接用本地路径,project_log_dir必须指向DBFS路径。比如改成/dbfs/mnt/your-log-dir(本地挂载路径)或dbfs:/mnt/your-log-dir(DBFS协议路径),同时确保该路径已创建且有写入权限。
  • 重复添加日志处理器:多次运行笔记本会导致根日志器重复添加处理器,可能引发异常。在configure_logger函数开头添加以下代码清空现有处理器:
    # 清空现有处理器,避免重复添加
    for handler in logger.handlers[:]:
        logger.removeHandler(handler)
    
  • 路径验证:在configure_logger中添加路径打印,确认最终日志路径是否正确:
    print(f"最终日志路径: {logfile_output}")
    
    之后可以用dbutils.fs.ls(logfile_output)在笔记本中检查文件是否存在。
  • 子日志器级别设置:确保其他模块的日志器没有单独设置高于DEBUG的级别,否则会过滤掉日志。可以在其他模块中显式设置级别:
    logger.setLevel(logging.DEBUG)
    

内容的提问来源于stack exchange,提问作者csp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 12:46:15