Automatiquement suivi¶
logfire.install_auto_tracing Tous les appels de fonction dans le module spécifié sont suivis.
Cela se fait en modifiant la façon dont ces modules sont importés, de sorte que la fonction doit être appelée avant d'importer les modules que vous souhaitez suivre.
Par exemple, supposons que tout votre code se trouve dans un package 应用程序, par exemple app.main,app.server,app.db, etc. Au lieu de lancer une application avec python app/main.py, vous pouvez créer un autre fichier en dehors du package 应用程序, par exemple:
import logfire
logfire.configure()
logfire.install_auto_tracing(modules=['app'])
from app.main import main
main()
Filtrer les modules à suivre¶
L'argument modules peut être une liste de noms de modules. tous les sous-modules d'un module donné seront également suivis, par exemple app.main et app.server. les autres modules dont les noms commencent par le même préfixe ne seront pas suivis, par exemple 苹果.
Si l'une des chaînes de la liste n'est pas un nom de module valide, elle sera considérée comme une expression rationnelle, donc par exemple modules=['app.*']. en plus de En plus de app.main, etc.,苹果 est également suivi.
Pour plus de contrôle,modules L'argument peut être une fonction qui renvoie un module qui doit être suivi. True Cette fonction utilise [AutoTraceModule][logfire 调用。AutoTraceModule] un objet, qui a un name et filename Par exemple, cela devrait suivre tous les modules d'une installation Python typique qui ne font pas partie d'une bibliothèque standard ou d'un paquet tiers:
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)
Exclure des fonctions du tracking¶
Une fois que vous avez sélectionné les modules que vous souhaitez suivre, vous ne voudrez peut-être pas suivre_dans ces modules par fonction_. Pour exclure une fonction du suivi automatique, ajoutez no_auto_trace décorateur:
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):
...
Un décorateur a été détecté lors de l'importation.@no_auto_trace ou @logfire.no_auto_trace seuls sont pris en charge. renommer/alias une fonction ou un module ne fonctionnera pas. il ne sera pas appelé indirectement par une autre fonction.
Ce décorateur ne renvoie que des paramètres non modifiés, donc le coût d'exécution est nul.
Suivre uniquement les fonctions qui dépassent la durée minimale¶
Une façon plus pratique d'exclure une fonction de la trace est de définir un paramètre [min_duration ][logfire.Logfire.install_auto_tracing(min_duration)], par exemple:
# Only trace functions that take longer than 0.1 seconds
logfire.install_auto_tracing(modules=['app'], min_duration=0.1)
Cela signifie que vous pouvez obtenir automatiquement l'observabilité des parties les plus lourdes de votre application sans trop de frais généraux ou de données-notez qu 'il y a quelques considérations:
-
Les fonctions ne commencent à être suivies qu 'après avoir été exécutées plus de
min_duration.-
S'il fonctionne plus vite que les précédents
min_duration, vous ne pourrez pas obtenir de données sur ces premiers appels. -
Si vous exécutez plus de
min_durationla première fois, vous n'obtiendrez pas non plus de données sur l'appel.
-
-
Si une fonction est exécutée plus de
min_duration, elle est suivie chaque fois qu 'elle est appelée, quel que soit le temps passé. -
Mesurer la durée d'un appel de fonction ajoute toujours une petite partie de la surcharge. pour les fonctions minuscules qui sont appelées très fréquemment, il est toujours préférable d'utiliser le décorateur
@no_auto_tracepour éviter toute surcharge. le suivi automatique avecmin_durationfonctionne toujours avec d'autres fonctionnalités non embellies.
本文总阅读量次