Python logging配置INFO级别日志写入文件未生成对应文件问题
问题原因与排查方案
核心触发原因
logging.basicConfig未生效:该配置仅在根日志器没有任何预置处理器时生效。如果调用basicConfig前,你的代码、导入的第三方模块已经执行过任意logging输出操作,或是手动给根日志器添加过处理器,后续的basicConfig配置会直接被忽略,不会触发日志文件创建逻辑。- 工作目录不匹配:你使用了相对路径定义日志文件名,日志文件会生成在代码运行时的当前工作目录,而非代码文件本身存储的目录。如果IDE运行配置、命令行执行的启动路径不是代码文件所在目录,日志文件会生成在其他路径,你在代码文件目录下无法找到。
- 目录写入权限不足:如果运行代码的用户对当前工作目录没有写入权限,大部分场景会抛出IO错误,但在系统级受保护目录(如Windows的
Program Files、macOS的/System目录)下会触发系统写入重定向,不会报错也不会在目标路径生成文件。
排查步骤
- 确认当前工作目录,在代码开头添加以下代码:
import os print("当前工作目录:", os.getcwd())
运行后前往输出的路径下查找是否存在目标日志文件。
2. 清理预置的日志处理器,避免已有配置覆盖你的设置,在调用basicConfig前添加以下代码:
import logging # 清空根日志器已有处理器 for handler in logging.root.handlers[:]: logging.root.removeHandler(handler)
修改后重新运行,检查是否生成日志文件。
3. 改用绝对路径测试,直接指定你确认有写入权限的目录作为日志存储路径,例如:
# Windows示例 logging.basicConfig(filename=r'C:\Users\用户名\Desktop\moses_data_extraction.log', # macOS/Linux示例 # logging.basicConfig(filename='/home/用户名/Desktop/moses_data_extraction.log', filemode='w', format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S', level=logging.INFO)
如果使用绝对路径可以正常生成文件,说明原问题出在相对路径对应的工作目录权限或路径匹配问题。
内容的提问来源于stack exchange,提问作者JFerro
相关产品推荐
相关产品推荐

