स्वचालित ट्रैकिंग¶
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 विशेषताएं। उदाहरण के लिए, यह एक विशिष्ट पायथन स्थापना में सभी मॉड्यूल को ट्रैक करना चाहिए जो मानक पुस्तकालय या तृतीय-पक्ष पैकेज का हिस्सा नहीं हैं:
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स्वचालित ट्रैकिंग अभी भी अन्य अप्रकाशित सुविधाओं पर लागू होती है।
本文总阅读量次