python load_dotenv find_dotenv loguru

发布时间:2026/7/30 2:35:58
python load_dotenv find_dotenv loguru load_dotenvfind_dotenvloguruconfig.py必须在项目启动时最先被导入否则其他模块先from loguru import logger使用时默认 handler 还没被移除就会出现重复打印。from dotenv import load_dotenv, find_dotenv import os from loguru import logger import sys override 是否覆盖已有系统环境变量 默认 False系统已存在同名环境变量.env 中的值不会覆盖 True强制用 .env 内的值覆盖系统现有环境变量 verbose 日志警告开关 True如果找不到 .env 文件控制台输出警告日志 False文件不存在时静默无提示 load_dotenv(find_dotenv(), overrideTrue, verboseTrue) 日志文件 _log_dir os.path.join(os.path.dirname(__file__), logs) os.makedirs(_log_dir, exist_okTrue) # 【关键】先移除默认handler,然后重新添加一个排除progress_tracking的handler # 移除所有默认handler logger.remove() (1)日志输出到控制台 logger.add( sys.stderr, formatgreen{time:YYYY-MM-DD HH:mm:ss.SSS}/green | level{level: 8}/level | cyan{name}/cyan:cyan{function}/cyan:cyan{line}/cyan - level{message}/level, levelINFO, colorizeTrue ) (2)日志输出到日志文件 logger.add( os.path.join(_log_dir, logs_{time:YYYY-MM-DD}.log), levelINFO, # 只记录 INFO 及以上级别INFO / WARNING / ERRORDEBUG 不记录 formatgreen{time:YYYY-MM-DD HH:mm:ss.SSS}/green | level{level: 8}/level | cyan{name}/cyan:cyan{function}/cyan:cyan{line}/cyan - level{message}/level, rotation00:00, # 日志轮转每天零点自动切新文件旧文件重命名归档 retention7 days, # 保留策略只保留最近 7 天的日志超期自动删除 compressionzip, # 轮转后的旧日志自动压缩为 .zip节省磁盘 enqueueTrue, # 异步写入日志先入队列后台线程批量写文件避免阻塞主业务 backtraceTrue, # 异常时打印完整调用链loguru 特性比 Python 默认的 traceback 更详细 diagnoseTrue, # 异常时显示局部变量值方便排查问题 ) (3)错误日志输出到日志文件 logger.add( os.path.join(_log_dir, error_{time:YYYY-MM-DD}.log), levelERROR, # 只记录 INFO 及以上级别INFO / WARNING / ERRORDEBUG 不记录 formatgreen{time:YYYY-MM-DD HH:mm:ss.SSS}/green | level{level: 8}/level | cyan{name}/cyan:cyan{function}/cyan:cyan{line}/cyan - level{message}/level, rotation00:00, # 日志轮转每天零点自动切新文件旧文件重命名归档 retention7 days, # 保留策略只保留最近 7 天的日志超期自动删除 compressionzip, # 轮转后的旧日志自动压缩为 .zip节省磁盘 enqueueTrue, # 异步写入日志先入队列后台线程批量写文件避免阻塞主业务 backtraceTrue, # 异常时打印完整调用链loguru 特性比 Python 默认的 traceback 更详细 diagnoseTrue, # 异常时显示局部变量值方便排查问题 ) API_TEST_KEY os.getenv(API_TEST_KEY) logger.debug(param:{}, API_TEST_KEY) logger.info(param:{}, API_TEST_KEY) logger.warning(param:{}, API_TEST_KEY) logger.error(param:{}, API_TEST_KEY)如何保证config.py被优先导入# main.py — 第一行就导入 config import config # ✅ 最先执行完成 logger 初始化 from fastapi import FastAPI from loguru import logger # 此时 logger 已经配好 app FastAPI() app.get(/) async def root(): logger.info(请求来了) # 直接使用配置好的 logger return {ok: True}.env文件 API_TEST_KEYskxwq0123jr123021903