Автоматическое отслеживание¶
logfire.install_auto_tracing Отслеживаются все вызовы функций в указанном модуле.
Это достигается путем изменения способа импорта этих модулей, поэтому функцию необходимо вызвать перед импортом отслеживаемых модулей.
Например, предположим, что весь ваш код находится в пакете 应用程序, например app.main,app.server,app.db и т. д. Вы можете создать другой файл вне пакета 应用程序 вместо запуска приложения с помощью python app/main.py, например:
import logfire
logfire.configure()
logfire.install_auto_tracing(modules=['app'])
from app.main import main
main()
Фильтрация модулей для отслеживания¶
Параметр modules может быть списком имен модулей. Любые подмодули внутри данного модуля также будут отслеживаться, например app.main и app.server. Другие модули, имена которых начинаются с того же префикса, не будут отслеживаться, например 苹果.
Если одна из строк в списке не является допустимым именем модуля, она будет рассматриваться как регулярное выражение, например modules=['app.*']. кроме Кроме того,app.main также отслеживают 苹果.
Чтобы получить больше контроля, аргумент modules может быть функцией, которая возвращает True для модуля, который должен отслеживаться. Эта функция будет использовать объект [AutoTraceModule ][logfire 调用。AutoTraceModule], который имеет свойства name и filename. Например, это должно отслеживать все модули, которые не принадлежат стандартной библиотеке или стороннему пакету в стандартной установке Python:
import pathlib
import logfire
PYTHON_LIB_ROOT = str(pathlib.Path(pathlib.__file__).parent)
def should_trace(module: logfire.AutoTraceModule) -> bool:
return not module.filename.startswith(PYTHON_LIB_ROOT)
logfire.install_auto_tracing(should_trace)
Исключение функций из трассировки¶
После того, как вы выберете модули, которые вы хотите отслеживать, вы можете не отслеживать их в этих модулях_Для каждого из_Функции. Чтобы исключить функцию из автоматического отслеживания, добавьте ее к ней no_auto_trace Декоративные устройства:
import logfire
@logfire.no_auto_trace
def my_function():
# 嵌套函数也将被排除在外
def inner_function():
...
return other_function()
# 此功能*不*从自动跟踪中排除。
# 即使从上面排除的 'my_function' 调用,它仍然会被追踪。
def other_function():
...
# 修饰类的所有方法也将被排除在外
@no_auto_trace
class MyClass:
def my_method(self):
...
Декоратор обнаружен при импорте. Поддерживаются только @no_auto_trace или @logfire.no_auto_trace. Функция переименования/псевдоним или модуль не будет работать. Также он не будет вызывать его косвенно через другую функцию.
Этот декоратор возвращает только те параметры, которые не были изменены, так что при выполнении они равны нулю.
Отслеживать только функции, продолжительность которых превышает минимальную¶
Более удобный способ исключить функции из отслеживания-установить параметр [min_duration ][logfire.Logfire.install_auto_tracing(min_duration)], например:
# Only trace functions that take longer than 0.1 seconds
logfire.install_auto_tracing(modules=['app'], min_duration=0.1)
Это означает, что вы можете автоматически видеть более тяжелые части приложения без больших затрат или данных. Обратите внимание, что есть несколько соображений:
-
Функция начинает отслеживаться только после того, как она будет запущена больше, чем
min_duration. Это означает:-
Если он работает быстрее, чем предыдущие несколько раз
min_duration, вы не сможете получить данные об этих первых вызовах. -
Если первый запуск превышает
min_duration, вы также не получите данные об этом вызове.
-
-
Если функция выполняется более чем раз, чем
min_duration, она будет отслеживаться каждый раз, когда вызывается функция, независимо от того, сколько времени это занимает. -
Измерение продолжительности вызова функции все равно увеличивает небольшую долю накладных расходов. Для небольших функций, которые вызываются очень часто, лучше всего использовать декор
@no_auto_trace, чтобы избежать накладных расходов. Автоотслеживание с помощьюmin_durationпо-прежнему доступно для других немодифицированных функций.
本文总阅读量次