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
相关产品推荐
相关产品推荐

