Включение отладки
Возврат отладочной информации в ответах REST API
По умолчанию сервер не добавляет детали ошибок в тело ответа, чтобы избежать раскрытия информации, специфичной для инстанса, конечным пользователям.
Вы можете изменить это, установив:
$ export SYNCMASTER__SERVER__DEBUG=False
$ # запуск сервера REST API
$ curl -XPOST http://localhost:8000/failing/endpoint ...
{
"error": {
"code": "unknown",
"message": "Получено необработанное исключение. Пожалуйста, обратитесь в службу поддержки",
"details": null,
},
}
$ export SYNCMASTER__SERVER__DEBUG=True
$ # запуск сервера REST API
$ curl -XPOST http://localhost:8000/failing/endpoint ...
Traceback (most recent call last):
File ".../uvicorn/protocols/http/h11_impl.py", line 408, in run_asgi
result = await app( # type: ignore[func-returns-value]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File ".../site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
return await self.app(scope, receive, send)
ОПАСНО
Это только для среды разработки. НЕ используйте в продакшене!
Вывод отладочных логов на бэкенде
См. Настройки логирования, но замените уровень логирования INFO на DEBUG.
Заполнение заголовка X-Request-ID на бэкенде
Сервер может добавлять заголовок X-Request-ID к ответам, что позволяет сопоставлять запросы на клиенте с ответами бэкенда.
Это делается с помощью промежуточного ПО request_id, которое включено по умолчанию и может быть настроено, как описано ниже:
Bases: BaseModel
X-Request-ID Middleware Settings.
See asgi-correlation-id <https://github.com/snok/asgi-correlation-id>_ documentation.
Examples
.. code-block:: yaml :caption: config.yml
server:
request_id:
enabled: True
header_name: X-Request-ID
update_request_header: True
Source code in syncmaster/server/settings/server/request_id.py
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | |
Вывод идентификатора запроса в логи бэкенда
Это делается путем добавления специального фильтра к обработчику логирования:
logging.yml
# только для разработки
version: 1
disable_existing_loggers: false
filters:
# Добавляет идентификатор запроса как дополнительное поле с именем `correlation_id` к каждой записи лога.
# Это используется в сочетании с settings.server.request_id.enabled=True
# См. https://github.com/snok/asgi-correlation-id#configure-logging
correlation_id:
(): asgi_correlation_id.CorrelationIdFilter
uuid_length: 32
default_value: '-'
formatters:
plain:
(): logging.Formatter
# Добавление correlation_id к записям лога
fmt: '%(asctime)s.%(msecs)03d %(processName)s:%(process)d %(name)s:%(lineno)d [%(levelname)s] %(correlation_id)s %(message)s'
datefmt: '%Y-%m-%d %H:%M:%S'
handlers:
main:
class: logging.StreamHandler
formatter: plain
filters: [correlation_id]
stream: ext://sys.stdout
celery:
class: logging.StreamHandler
formatter: plain
filters: [correlation_id]
stream: ext://sys.stdout
loggers:
'':
handlers: [main]
level: INFO
propagate: false
uvicorn:
handlers: [main]
level: INFO
propagate: false
celery:
level: INFO
handlers: [celery]
propagate: false
scheduler:
handlers: [main]
level: INFO
propagate: false
py4j:
handlers: [main]
level: WARNING
propagate: false
hdfs.client:
handlers: [main]
level: WARNING
propagate: false
Получаемые логи выглядят так:
2023-12-18 17:14:11.711 uvicorn.access:498 [INFO] 018c15e97a068ae09484f8c25e2799dd 127.0.0.1:34884 - "GET /monitoring/ping HTTP/1.1" 200