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

Python logging日志既不打印控制台也不写入日志文件问题求助

问题诊断

你的日志完全不输出的核心错误是未给自定义Logger实例设置日志过滤级别。
Python logging 模块的日志处理是分层过滤的:

  • 第一层过滤在Logger实例本身:日志消息产生后,首先会和Logger自身的级别对比,低于该级别的消息会被直接丢弃,不会传递给任何绑定的处理器
  • 第二层过滤在各个绑定的Handler:只有通过Logger层校验的消息,才会流转到Handler,Handler再根据自身配置的级别决定是否输出到对应位置

你的代码存在3个直接导致日志失效的问题:

  • 创建MyLogger实例后没有调用setLevel()设置级别,自定义Logger的默认级别是logging.WARNING,所有INFO、DEBUG级别的日志在入口就被拦截,根本到不了控制台和文件处理器
  • 文件处理器fh没有显式设置日志级别,默认级别为NOTSET,继承上层配置后实际生效级别也是WARNING,就算Logger放行了INFO日志,文件处理器也不会写入
  • 用if not bool(logger.handlers)判断是否重复添加Handler的逻辑不可靠:如果其他代码提前给同名Logger绑定过处理器,这段逻辑会直接跳过所有配置,导致日志输出行为不符合预期。
修复代码

直接修改helper.py中的get_logger函数即可,修改后完整代码如下:

import logging
import os
from json import load

def get_config(value):
    with open('config.json','r') as f:
        result=load(f)[value]
    return result


def get_logger(name,level):
    logpath=get_config("log_path")
    if not os.path.exists(logpath):
        os.mkdir(logpath)
    logger = logging.getLogger(name)
    # 给Logger设置全局级别,放行对应等级的日志进入处理流
    logger.setLevel(level)
    # 清空已有处理器,避免重复添加导致日志重复打印
    logger.handlers.clear()
    
    formatter = logging.Formatter(
        '%(asctime)s.%(msecs)03d - %(name)s - %(levelname)s - %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S'
    )

    # 配置文件处理器
    fh = logging.FileHandler(
        os.path.join(logpath, f'{get_config("log_file_name")}.log'),
        mode="w",
        encoding='utf-8'
    )
    fh.setFormatter(formatter)
    fh.setLevel(level) # 给文件处理器设置级别
    logger.addHandler(fh)

    # 配置控制台处理器
    ch = logging.StreamHandler()
    ch.setFormatter(formatter)
    ch.setLevel(level)
    logger.addHandler(ch)

    return logger


LOGGER=get_logger("MyLogger", logging.INFO)
补充说明

你之前用basicConfig()时出现print()输出和日志顺序错乱的问题,是因为logging的流处理器默认带输出缓冲,和print的行缓冲机制不一致导致的,修好上述级别问题后直接用自定义Handler的方案即可,不需要回退到basicConfig()。


内容的提问来源于stack exchange,提问作者Super Ultra Noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:48:14