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

Python多模块单日志配置问题:日志文件为空求助

问题分析与解决方案

核心问题点

  1. 日志级别不匹配
    你的info_file handler设置的级别是INFO,但代码中所有日志调用用的都是logger.debug——DEBUG级别低于INFO,会被该handler直接过滤,不会写入日志文件。

  2. 根日志配置错误
    配置里loggers的key写的是' '(空格),这不是Python logging中根日志的正确标识,根日志的key必须是''(空字符串)。当前getLogger(__name__)获取的logger无法匹配到这个错误配置的logger,导致日志没有关联到对应的文件handler。

  3. 日志调用格式错误
    比如logger.debug("main pid:", os.getpid())这种写法不符合logging的规范,正确的用法应该是将参数通过格式化字符串传递,否则日志消息不会包含你期望的参数内容,甚至可能导致日志无法正常输出。

  4. 未定义的handler引用
    配置中mypackage logger引用了debug_console handler,但这个handler在handlers部分完全没定义,不过这不是日志文件为空的直接原因,但会影响该logger的日志输出。

修正步骤

1. 修复日志配置

修改dictConfig中的配置,调整根日志标识和handler级别:

d = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'detailed': {
            'format': '%(asctime)s-%(levelname)s-%(name)s-%(process)d::%(module)s|%(lineno)s:: %(message)s'
       }
   },
    'handlers': {
        'info_file': {
            'class': 'logging.FileHandler',
            'level':'DEBUG',  # 改为DEBUG,让debug级日志能被写入
            'formatter': 'detailed',
            'filename': 'test.log',
            'mode': 'w',
        },
        'errors_file': {
            'class': 'logging.FileHandler',
            'filename': 'errors.log',
            'mode': 'w',
            'level': 'ERROR',
            'formatter': 'detailed',
        },
    },
   'loggers': {
       '': {  # 改为空字符串,作为根日志配置
           'handlers': ['info_file','errors_file'],
           'level':'DEBUG',
           'propagate':False
        }
    },
    # 注释掉或修复未定义的handler引用
    # 'mypackage': {
    #     'level': 'DEBUG',
    #     'handlers': ['debug_console']  # debug_console未定义,需补充或删除
    # },
}

2. 修正日志调用格式

把所有多参数的日志调用改为格式化字符串形式:

def starting_main_mod(thisfile):
    logger.debug("starting the main module")
    try:
        logger.debug("main pid: %s", os.getpid())
        logger.debug("start time: %s", time.strftime("%H:%M:%S", time.localtime()))
        logger.debug("available worker: %s", worker_count)
        logger.debug("end time: %s, elapsed: %s", time.strftime("%H:%M:%S", time.localtime()), time.time()-start_time)
    except:
        logger.debug("could not write file %s to destination", thisfile)
    finally:
        logger.debug("the function is done for the file %s", thisfile)

3. 确认配置生效条件

确保config['system']['log_ind'] == 1为True,否则dictConfig不会执行,日志配置完全不生效。

额外提示

如果只需要记录INFO及以上级别日志,也可以不修改handler的level,而是把代码中的logger.debug改为logger.info,根据你的实际需求选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:25:28