FastAPI - uvicorn设置 logger 日志格式

怎么将日志打印到文件

在这里插入图片描述

在main.py加入log_config=“./uvicorn_config.json”

import uvicorn

if __name__ == "__main__":
 uvicorn.run("app:app", host="0.0.0.0", port=8000, log_config="./uvicorn_config.json")

uvicorn_config.json

{
    "version": 1,
    "disable_existing_loggers": false,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(asctime) s - %(levelprefix) s %(message) 3",
            "use_colors": null
        },
        "aссеss": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": "%(asctime) s - %(levelprefix)s %(client_addr)s - \"%(request_line)s\" % (status_code) s"
        },
        "handlers": {
            "default": {
                "formatter": "default",
                "class": "logging.StreamHandler",
                "stream": "ext://sys.stderr"
            },
            "access": {
                "formatter": "access",
                "class": "logging.StreamHandler",
                "stream": "ext://sys.stdout"
            }
        },
        "loggers": {
            "uvicorn": {
                "handlers": [
                    "default"
                ],
                "level": "INFO"
            },
            "uvicorn.error": {
                "level": "INFO"
            },
            "uvicorn.access": {
                "handlers": [
                    "ассеss"
                ],
                "level": "INFO",
                "propagate": false
            }
        }
    }
}
### 实现FastAPI与Loguru的热加载 为了在 FastAPI 项目中使用 Loguru 并实现热加载功能,可以采用如下方法: #### 配置 Loguru 日志记录器 首先,在项目的入口文件 `main.py` 中配置 Loguru 的日志记录器。移除默认的日志处理器并添加自定义的处理器。 ```python from fastapi import FastAPI import uvicorn from loguru import logger logger.remove() # 移除默认处理程序 logger.add("file_{time}.log") # 添加新的日志文件处理程序 app = FastAPI() @app.get("/") async def read_root(): logger.info("Accessed root endpoint") return {"message": "Hello World"} ``` 此部分设置确保了每次请求都会被记录到指定的日志文件中[^1]。 #### 使用 Uvicorn 启动应用并启用重载模式 Uvicorn 是一个用于运行 ASGI 应用(如 FastAPI)的服务器。通过命令行参数启动应用程序时可开启自动重启特性来模拟热更新行为。 ```bash uvicorn main:app --reload ``` 当上述命令执行后,任何 Python 文件中的更改都将触发整个进程的重新加载,从而间接实现了“热加载”的效果[^2]。 需要注意的是,这种方式并非严格意义上的 Hot Code Loading 或者 Hot Module Replacement (HMR),因为这涉及到完全重启服务而不是仅替换已改变模块的行为。对于某些框架来说,比如 Dioxus 支持更为精细级别的 HMR 功能[^3];但在 FastAPI 和 Loguru 组合的情况下,利用 Uvicorn 提供的过程级重载机制已经能够满足大多数开发阶段的需求。 #### 结合 Watchfiles 进一步优化 如果希望进一步减少不必要的全量刷新次数,则可以考虑引入第三方库 watchfiles 来监控特定路径下的变动情况,并据此决定是否需要触发 reload 行为。 安装依赖包: ```bash pip install watchfiles ``` 调整启动方式: ```python if __name__ == "__main__": from watchfiles.run import run_process run_process("./", target=run_uvicorn, watch_filter=lambda change, path: str(path).endswith(".py")) def run_uvicorn(): uvicorn.run(app="main:app", host='0.0.0.0', port=8000, reload=True) ``` 这样做的好处是可以更加精准地控制哪些类型的文件变化会引发服务端的重启操作,进而提高开发效率的同时也减少了频繁重启带来的性能开销。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值