自動追跡¶
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を使用した自動追跡は、他の修飾されていない機能にも引き続き適用されます。
本文总阅读量次