Pelacakan otomatis¶
logfire.install_auto_tracing Semua panggilan fungsi dalam modul yang ditentukan dilacak.
Hal ini dicapai dengan mengubah cara modul ini diimpor, sehingga fungsi tersebut harus dipanggil sebelum mengimpor modul untuk dilacak.
Misalnya, katakanlah semua kode Anda terletak di 应用程序 Dalam paket, misalnya app.main,app.server,app.db Tunggu. Anda dapat menemukannya di 应用程序 Buat file lain di luar paket alih-alih menggunakan python app/main.py Luncurkan aplikasi, misalnya:
import logfire
logfire.configure()
logfire.install_auto_tracing(modules=['app'])
from app.main import main
main()
Modul filter untuk dilacak¶
Parameter modules dapat berupa daftar nama modul. Setiap submodul dalam modul yang diberikan juga akan dilacak, seperti app.main dan app.server. Modul lain yang namanya dimulai dengan awalan yang sama tidak akan dilacak, seperti 苹果.
Jika salah satu string dalam daftar bukan nama modul yang valid, maka akan diperlakukan sebagai ekspresi biasa, jadi misalnya modules=['app.*'] melacak 苹果 selainapp.main dan sebagainya.
Untuk kontrol lebih lanjut, argumen modules dapat menjadi fungsi yang mengembalikan True untuk modul yang harus dilacak. Fungsi ini akan menggunakan objek [AutoTraceModule ][logfire 调用。AutoTraceModule], yang memiliki sifat name dan filename.
Misalnya, ini harus melacak semua modul dalam instalasi Python tipikal yang bukan bagian dari perpustakaan standar atau paket pihak ketiga.
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)
Kecualikan fungsi dari penelusuran¶
Setelah Anda memilih modul yang ingin Anda lacak, Anda mungkin tidak ingin melacak modul tersebut_masing-masing_Fungsi. Untuk mengecualikan fungsi dari penelusuran otomatis, tambahkan no_auto_trace Dekorator:
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):
...
Dekorator terdeteksi pada impor. Hanya @no_auto_trace atau @logfire.no_auto_trace yang didukung. Penggantian nama / aliasing suatu fungsi atau modul tidak akan berfungsi. Juga tidak akan disebut secara tidak langsung melalui fungsi lain.
Dekorator ini hanya mengembalikan parameter yang tidak berubah, sehingga runtime overhead adalah nol.
Hanya fungsi trek yang melebihi durasi terpendek¶
Cara yang lebih nyaman untuk mengecualikan fungsi dari penelusuran adalah dengan mengatur parameter [min_duration ][logfire.Logfire.install_auto_tracing(min_duration)], misalnya:
# Only trace functions that take longer than 0.1 seconds
logfire.install_auto_tracing(modules=['app'], min_duration=0.1)
Ini berarti Anda dapat secara otomatis mendapatkan pengamatan bagian yang lebih berat dari aplikasi Anda tanpa banyak overhead atau data. Harap dicatat bahwa ada beberapa peringatan:
-
Fungsi hanya akan mulai dilacak setelah berjalan lebih dari waktu
min_duration. Ini berarti:-
Jika berjalan lebih cepat daripada beberapa panggilan
min_durationpertama, Anda tidak akan memiliki akses ke data tentang panggilan pertama tersebut. -
Jika Anda menjalankan lebih dari
min_durationuntuk pertama kalinya, Anda juga tidak akan mendapatkan data tentang panggilan itu.
-
-
Jika suatu fungsi berjalan lebih dari
min_duration, ia dilacak setiap kali fungsi tersebut disebut, terlepas dari berapa lama waktu yang dibutuhkan. -
Mengukur durasi panggilan fungsi masih menambahkan sedikit overhead. Untuk fungsi kecil yang sering disebut, masih sebaiknya gunakan dekorator
@no_auto_traceuntuk menghindari overhead. Pelacakan otomatis denganmin_durationmasih berfungsi untuk fitur lain yang tidak didekorasi.
本文总阅读量次