Грэм Дамплтон: Нулевое трассир... Заметка
Planet Python на русском

Грэм Дамплтон: Нулевое трассировка с обёрткой

Этот текст описывает, как использовать инструмент "wrapture" для наблюдения и отслеживания программ Python без изменения их исходного кода. Изначально отслеживание включало редактирование точки входа программы, что нежелательно для унаследованного или общего кода. Более гибкий подход использует отдельный конфигурационный файл, wrapture.toml, для указания того, что наблюдать и куда отправлять данные трассировки. Этот конфигурационный файл определяет цели наблюдения и связанные с ними методы, а также правила маскирования данных.Файл wrapture.toml позволяет нацеливаться на конкретные имена методов или шаблоны glob в модулях. Инструмент запускается с помощью python -m wrapture, за которым следует скрипт программы, который применяет конфигурацию перед выполнением программы. Этот метод генерирует тот же вывод трассировки, что и подход с модификацией исходного кода, но сохраняет логику наблюдения внешней. Для более длительных приложений вывод трассировки может быть направлен в файл, например trace.jsonl, в формате JSON Lines.Этот формат файла фиксирует подробную информацию о событиях, включая аргументы, результаты, исключения и время, что делает его легко обрабатываемым распространенными инструментами, такими как jq. Соображения безопасности при оставлении активной трассировки включают ограниченную очередь для предотвращения блокировки и суммирование аргументов, чтобы избежать сохранения живых объектов. Когда прямая командная строка невозможна, autowrapt может использоваться для внедрения wrapture при запуске интерпретатора через переменную окружения.Этот механизм загрузки обычно предназначен для разработки или отладки, а не для производственных сред. После внедрения трассировки ее можно динамически контролировать – приостанавливать и возобновлять или полностью отменять – без перезапуска приложения, используя функции, доступные через wrapture.bootstrap. Следующим шагом для wrapture является применение этой возможности трассировки к более сложным единицам приложений, таким как те, которые встречаются в веб-приложениях.