자동 추적¶
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 만 지원됩니다. 함수 또는 모듈의 이름 변경/앨리어싱이 작동하지 않습니다. 다른 기능을 통해 간접적으로 호출되지도 않습니다.
이 데코레이터는 변경되지 않은 매개 변수만 반환하므로 런타임 오버헤드가 0입니다.
최단 기간을 초과하는 트랙 기능만¶
추적에서 함수를 제외하는 더 편리한 방법은 예를 들어[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자동 추적은 여전히 꾸미지 않은 다른 기능에 적용됩니다.
本文总阅读量次