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

Python Logger写入文件仅输出None故障排查求助

问题排查与修复方案

核心问题点

  • 重复设置日志级别导致低级别日志被过滤:你连续调用了4次logger.setLevel(),只有最后一次设置的logging.CRITICAL会生效,DEBUG级别远低于CRITICAL,因此logger.debug()的内容根本不会被日志模块输出。
  • 日志方法无返回值:logger.debug()/logger.info()等日志打印方法本身没有返回值,因此你赋值的write_message天然就是None,手动写入文件的内容自然只有None。
  • 重复操作同一文件引发冲突:你手动打开的文件路径和传给FileHandler的路径完全一致,相当于两个独立对象同时操作同一个文件,不仅冗余还可能引发写入冲突。

修复方案

1. 修正日志初始化函数

删掉多余的日志级别设置,仅保留需要的最低输出级别即可,示例如下:

import logging
def createLogger(name, log_path=None):
    logger = logging.getLogger(name) 
    # 仅保留一次级别设置,DEBUG表示所有级别日志都会输出
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(asctime)s - %(levelname)-8s - %(message)s")
    # 控制台输出handler
    stream_handler = logging.StreamHandler()
    stream_handler.setFormatter(formatter)
    logger.addHandler(stream_handler)
    # 文件输出handler
    if log_path is not None:
        file_handler = logging.FileHandler(log_path, encoding='utf-8')
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)
    return logger

2. 简化调用逻辑

删除手动操作文件的冗余代码,日志模块会自动通过FileHandler写入内容:

import os
# 此处补充你自己定义的current_date、current_timestamp变量赋值逻辑
current_date = "2024-01-01"
current_timestamp = "1704067200"

name = "temp_logs"
log_path  = os.path.join(current_date, f'{name}_{current_timestamp}.txt')
logger = createLogger(name = name ,log_path = log_path)
# 直接调用日志方法即可,内容会自动输出到控制台+日志文件
logger.debug('This is a test file')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:09:03