Logger basicConfig无法指定特定文件夹问题排查
问题分析与解决
核心问题
你的代码存在两个关键错误,导致日志文件无法创建且出现意外文件删除:
路径未作为字符串传递
示例代码中filename=project-folder/logs/123/123.logs是语法错误:project-folder会被Python解析为project - folder(变量减法运算),而非路径字符串。这种错误会导致Python尝试解析不存在的变量,进而触发意外的文件系统操作,这大概率是你看到其他文件被删除的原因。目标子目录不存在
Python的logging.basicConfig不会自动创建不存在的目录。如果project-folder/logs/123这个子目录未提前创建,Python尝试写入日志文件时会抛出FileNotFoundError,导致日志文件无法生成。
另外你提到设置为project-folder/logs正常,这其实是错误用法:filename参数要求传入文件路径而非文件夹路径。这种情况下Python会尝试将文件夹当作文件打开,属于未定义行为,只是在你的环境中凑巧没有报错,但并非正确用法。
修复步骤
将路径改为字符串格式
用引号包裹路径,同时推荐使用跨平台的路径写法:# 直接用字符串(注意后缀建议用.log而非.logs,可根据需求调整) filename="project-folder/logs/123/123.log"提前创建目标目录
在调用basicConfig前,用os.makedirs确保目录存在:import logging import os # 定义日志目录和文件路径 log_dir = "project-folder/logs/123" log_file = os.path.join(log_dir, "123.log") # 创建目录(exist_ok=True避免目录已存在时抛出异常) os.makedirs(log_dir, exist_ok=True) # 初始化日志配置 logging.basicConfig( level=logging.INFO, format="%(asctime)s %(name)s :%(levelname)s :%(message)s", filename=log_file, filemode="a", force=True )避免将文件夹作为filename传入
正确的写法应该是指定具体的日志文件路径,比如project-folder/logs/root.log,而非直接传入文件夹路径。
内容的提问来源于stack exchange,提问作者Inbar W
相关产品推荐
相关产品推荐

