Сервис FastAPI предоставляется через uvicorn, а логи настраиваются в uvicorn. Официальный адрес документа: https://www.uvicorn.org/settings/#logging.
мы можем пройти uvicorn.run() Способ Запустить службу
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, этот параметр игнорируется.
Когда мы читаем Запустить сервис, Служитьинтерфейсиз, мы видим, что избревно не отображается формат времени из
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,
)
Журнал запуска
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 — конфигурация журналирования uvicorn по умолчанию.
from uvicorn.config import LOGGING_CONFIG
Найдите содержимое конфигурации в исходном коде следующим образом:
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 },
},
}
мы можем пройти, изменяет формат избревного формата по умолчанию для "форматеров" для управления кратким выводом из формата.
from fastapi import FastAPIfrom uvicorn.config import LOGGING_CONFIG
LOGGING_CONFIG["formatters"]["default"]["fmt"] = "%(asctime)s - %(levelprefix)s %(message)s"
app = FastAPI()
······
Затем вы можете просмотреть журнал запуска, в котором впереди добавлено время «%(asctime)s».
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 контролируются путем изменения формата «доступа».
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()
Предыдущим шагом является настройка журнала путем изменения параметров по умолчанию LOGGING_CONFIG. Мы также можем записать файл конфигурации отдельно в файл uvicorn_config.json и загрузить локальный файл конфигурации, чтобы перезаписать файл конфигурации по умолчанию. uvicorn_config.json
Импорт файлов конфигурации при запуске
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"
)