1


我正在为 FastAPI python 上的字典构建一个 API。
我是这个框架的新手,但我有点喜欢它,所以我想尝试一下。
作为要求的一部分,其中一个要求是将每个 HTTP 请求记录到我的项目中的特定文件 .log 文件中,而不是在服务器端。
我尝试使用中间件,但我无法弄清楚。所以如果你们对如何做到这一点有任何想法,请帮助我,因为我找不到关于这个主题的太多信息。

因此,在我的 API 端点(如 mysite.com/words)中生成的每个请求,我都必须将其记录在一个文件中,包括时间戳和其他一些不重要的信息,因为这是细节的一部分,但我想要的只是能够获取每个请求并将它们记录到文本文件中..

先感谢您..

4

2 回答 2

1

您可以简单地logging在 Python 中使用本机模块。例如:

#logger_config.py
import logging


def setup_logger(name) -> logging.Logger:
    FORMAT = "[%(name)s %(module)s:%(lineno)s]\n\t %(message)s \n"
    TIME_FORMAT = "%d.%m.%Y %I:%M:%S %p"

    logging.basicConfig(
        format=FORMAT, datefmt=TIME_FORMAT, level=logging.DEBUG, filename="my-project-root/path/log-file-name.log"
    )

    logger = logging.getLogger(name)
    return logger


# in any file that import fn setup_logger from the above 'logger_config.py', you can set up local logger like:
local_logger = setup_logger(__name__)

local_logger.info(
    f"I am writing to file {FILENAME}. If that file did not exist, it would be automatically created. Here, you can change me to write about the call to a specific route function etc."
)
于 2021-01-06T19:11:51.097 回答
1

我在我的项目中使用了一个 yaml 配置文件,它看起来像这样记录来自 uvicorn 的所有内容:

version: 1
disable_existing_loggers: no
    formatters:
        simple:
            format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
    handlers:
        ...
        uvicorn:
            class: logging.handlers.TimedRotatingFileHandler
            level: DEBUG
            formatter: simple
            when: D
            backupCount: 0
            filename: ./logs/uvicorn.log
    loggers:
        ...
        uvicorn:
            level: INFO
            handlers: [uvicorn]
            propagate: yes
            qualname: uvicorn

您可以将其改编为代码或仅在配置文件中使用它

于 2020-05-11T10:32:33.563 回答