Обучение FastAPI-uvicorn устанавливает формат журнала регистратора
Обучение FastAPI-uvicorn устанавливает формат журнала регистратора

Предисловие

Сервис FastAPI предоставляется через uvicorn, а логи настраиваются в uvicorn. Официальный адрес документа: https://www.uvicorn.org/settings/#logging.

журнал регистрации uvicorn

мы можем пройти uvicorn.run() Способ Запустить службу

Язык кода:javascript
копировать
uvicorn.run("example:app", port=5000, reload=True, access_log=False)

Таким образом, вы можете добавить некоторые параметры запуска, несколько параметров, связанных с ведением журнала:

--log-config<path> Файл конфигурации журнала. Параметры: dictConfig() Формат: .json, .yaml. Любые другие форматы будут обрабатываться с помощью fileConfig(). Установите значения formatters.default.use_colors и formatters.access.use_cors, чтобы переопределить автоматически обнаруженное поведение. Если вы хотите использовать файлы YAML в конфигурации ведения журналов, вам нужно будет сделать PyYAML зависимостью вашего проекта или установить uvicorn со [стандартными] дополнительными функциями.

--log-level<str> Установите уровень журнала. Опции: «критический», ‘error’, ‘warning’, ‘info’, ‘debug’, 'след'. Значение по умолчанию: «информация».

--no-access-log Отключено только ведение журнала доступа, уровень ведения журнала не изменяется.

--use-colors/--no-use-colorss-давать возможность/Запрещатьбревно Записыватьизцветовой формат,Если эта опция не установлена,будет автоматически обнаружен。Если вы используете--log-config CLI, этот параметр игнорируется.

Запустить службу

Когда мы читаем Запустить сервис, Служитьинтерфейсиз, мы видим, что избревно не отображается формат времени из

Язык кода:javascript
копировать
from fastapi import FastAPIapp = FastAPI()@app.get("/demo/")async def create_item():
    return {"demo": "hello world"}
if __name__ == "__main__":        import uvicorn
    uvicorn.run(
        app='main:app',
        host="127.0.0.1",
        reload=True,
        port=8000,
    )

Журнал запуска

Язык кода:javascript
копировать
INFO:     Will watch for changes in these directories: ['D:\\code\\fast_project\\xxx']
INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process [10924] using StatReload
INFO:     Started server process [5708]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     127.0.0.1:5161 - "GET / HTTP/1.1" 404 Not Found
INFO:     127.0.0.1:5161 - "GET /docs HTTP/1.1" 200 OK
INFO:     127.0.0.1:5161 - "GET /demo HTTP/1.1" 307 Temporary Redirect
INFO:     127.0.0.1:5161 - "GET /demo/ HTTP/1.1" 200 OK

Итак, откуда берутся эти журналы и как изменить формат журналов по умолчанию?

LOGGING_CONFIG формат журнала по умолчанию

LOGGING_CONFIG — конфигурация журналирования uvicorn по умолчанию.

Язык кода:javascript
копировать
from uvicorn.config import LOGGING_CONFIG

Найдите содержимое конфигурации в исходном коде следующим образом:

Язык кода:javascript
копировать
LOGGING_CONFIG: Dict[str, Any] = {        "version": 1,        "disable_existing_loggers": False,        "formatters": {               "default": {             "()": "uvicorn.logging.DefaultFormatter",            "fmt": "%(levelprefix)s %(message)s",            "use_colors": None,             },                 "access": {                        "()": "uvicorn.logging.AccessFormatter",           "fmt": '%(levelprefix)s %(client_addr)s - "%(request_line)s"                      %(status_code)s',  # noqa: E501

           },    },       "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",            "propagate": False           },                  "uvicorn.error": {                 "level": "INFO"               },                    "uvicorn.access": {                 "handlers": ["access"],                  "level": "INFO",                   "propagate": False                 },
    },
}

мы можем пройти, изменяет формат избревного формата по умолчанию для "форматеров" для управления кратким выводом из формата.

Язык кода:javascript
копировать
from fastapi import FastAPIfrom uvicorn.config import LOGGING_CONFIG
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "%(asctime)s - %(levelprefix)s %(message)s"
app = FastAPI()
······

Затем вы можете просмотреть журнал запуска, в котором впереди добавлено время «%(asctime)s».

Язык кода:javascript
копировать
2024-01-16 09:49:04,408 - INFO:     Will watch for changes in these directories: ['D:\\code\\fast_project\\xxx']
2024-01-16 09:49:04,408 - INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
2024-01-16 09:49:04,408 - INFO:     Started reloader process [9124] using StatReload
2024-01-16 09:49:04,924 - INFO:     Started server process [11020]
2024-01-16 09:49:04,924 - INFO:     Waiting for application startup.
2024-01-16 09:49:04,924 - INFO:     Application startup complete.

Журналы доступа к интерфейсу http контролируются путем изменения формата «доступа».

Язык кода:javascript
копировать
from fastapi import FastAPIfrom uvicorn.config import LOGGING_CONFIG
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "%(asctime)s - %(levelprefix)s %(message)s"LOGGING_CONFIG["formatters"]["access"]["fmt"] = "%(asctime)s - %(levelprefix)s %(client_addr)s - \"%(request_line)s\" %(status_code)s"app = FastAPI()

файл конфигурации log_config

Предыдущим шагом является настройка журнала путем изменения параметров по умолчанию LOGGING_CONFIG. Мы также можем записать файл конфигурации отдельно в файл uvicorn_config.json и загрузить локальный файл конфигурации, чтобы перезаписать файл конфигурации по умолчанию. uvicorn_config.json

Импорт файлов конфигурации при запуске

Язык кода:javascript
копировать
from fastapi import FastAPI

app = FastAPI()@app.get("/demo/")async def create_item():
    return {"demo": "hello world"}
if __name__ == "__main__":        import uvicorn
    uvicorn.run(
        app='main:app',
        host="127.0.0.1",
        reload=True,
        port=8000,
        log_config="./uvicorn_config.json"
    )
boy illustration
Графическое объяснение этапа строительства проекта IDEA 2021 Spring Cloud (базовая версия)
boy illustration
Подробное объяснение технологии междоменного запроса данных JSONP.
boy illustration
Учебное пособие по SpringBoot (14) | SpringBoot интегрирует Redis (наиболее полный во всей сети)
boy illustration
Подробное объяснение механизма подтверждения выпуска сообщений RabbitMQ.
boy illustration
На этот раз полностью поймите протокол ZooKeeper.
boy illustration
Реализуйте загрузку файлов с использованием минимального WEB API.
boy illustration
Демо1 Laravel5.2 — генерация и хранение URL-адресов
boy illustration
Spring boot интегрирует Kafka и реализует отправку и потребление информации (действительно при личном тестировании)
boy illustration
Мысли о решениях по внутренней реализации сортировки методом перетаскивания
boy illustration
Междоменный доступ к конфигурации nginx не может вступить в силу. Междоменный доступ к странице_Page
boy illustration
Как написать текстовый контент на php
boy illustration
PHP добавляет текстовый водяной знак или водяной знак изображения к изображениям – метод инкапсуляции
boy illustration
Интерпретация быстрой таблицы (TLB)
boy illustration
Интерфейс WeChat API (полный) — оплата WeChat/красный конверт WeChat/купон WeChat/магазин WeChat/JSAPI
boy illustration
Преобразование Java-объекта в json string_complex json-строки в объект
boy illustration
Примените сегментацию слов jieba (версия Java) и предоставьте пакет jar
boy illustration
matinal: Самый подробный анализ управления разрешениями во всей сети SAP. Все управление разрешениями находится здесь.
boy illustration
Коротко расскажу обо всем процессе работы алгоритма сборки мусора G1 --- Теоретическая часть -- Часть 1
boy illustration
[Спецификация] Результаты и исключения возврата интерфейса SpringBoot обрабатываются единообразно, поэтому инкапсуляция является элегантной.
boy illustration
Интерпретация каталога веб-проекта Flask
boy illustration
Что такое подробное объяснение файла WSDL_wsdl
boy illustration
Как запустить большую модель ИИ локально
boy illustration
Подведение итогов десяти самых популярных веб-фреймворков для Go
boy illustration
5 рекомендуемых проектов CMS с открытым исходным кодом на базе .Net Core
boy illustration
Java использует httpclient для отправки запросов HttpPost (отправка формы, загрузка файлов и передача данных Json)
boy illustration
Руководство по развертыванию Nginx в Linux (Centos)
boy illustration
Интервью с Alibaba по Java: можно ли использовать @Transactional и @Async вместе?
boy illustration
Облачный шлюз Spring реализует примеры балансировки нагрузки и проверки входа в систему.
boy illustration
Используйте Nginx для решения междоменных проблем
boy illustration
Произошла ошибка, когда сервер веб-сайта установил соединение с базой данных. WordPress предложил решение проблемы с установкой соединения с базой данных... [Легко понять]