$lang['tuto'] = "ट्यूटोरियल"; ?> त्रुटी दरम्यान

त्रुटी दरम्यान अलीकडील पायथन लॉगिंग संदेश कसे पुनर्प्राप्त करावे

Temp mail SuperHeros
त्रुटी दरम्यान अलीकडील पायथन लॉगिंग संदेश कसे पुनर्प्राप्त करावे
त्रुटी दरम्यान अलीकडील पायथन लॉगिंग संदेश कसे पुनर्प्राप्त करावे

एरर हँडलिंगसाठी पायथन लॉगिंग ऑप्टिमाइझ करणे

प्रोग्रामच्या अंमलबजावणीदरम्यान इव्हेंट ट्रॅक करण्यासाठी आणि समस्यांचे निदान करण्यासाठी पायथनमध्ये लॉग इन करणे आवश्यक आहे. तथापि, काही मॉड्यूल्स जास्त प्रमाणात ट्रेस माहिती तयार करू शकतात, ज्यामुळे लॉग गोंधळू शकतात. अशा प्रकरणांमध्ये, योग्य लॉगिंग स्तर सेट करणे, जसे की एरर, अनावश्यक तपशील फिल्टर करण्यात मदत करू शकते.

अशा परिस्थितीत जेथे एक मॉड्यूल जास्त लॉग व्युत्पन्न करतो, परंतु दुसऱ्या मॉड्यूलमध्ये त्रुटी आढळतात, ज्यामध्ये ते कॉल करतात, अलीकडील लॉग संदेशांमध्ये प्रवेश करणे महत्त्वपूर्ण होते. त्रुटीचे मूळ कारण शोधताना हे बर्याचदा घडते. जास्त नोंदी दुर्लक्षित करणे आणि महत्त्वाच्या नोंदी कॅप्चर करणे यामध्ये समतोल राखणे आवश्यक आहे.

लायब्ररी आवडतात spdlog C++ मध्ये रिंग बफरद्वारे बॅकट्रॅकिंगसाठी अंगभूत समर्थन आहे, ज्यामुळे विकासकांना अलीकडील लॉगचे पुनरावलोकन करण्याची परवानगी मिळते ज्यामुळे त्रुटी येते. अजगराचा लॉगिंग लायब्ररी, तथापि, हे वैशिष्ट्य बॉक्सच्या बाहेर ऑफर करत नाही, अशी यंत्रणा कशी कार्यान्वित करावी हा प्रश्न उपस्थित करते.

जेव्हा एखादी त्रुटी येते तेव्हा अलीकडील लॉग संदेश कॅप्चर करण्यासाठी आपण पायथनच्या लॉगिंग सिस्टमला कसे अनुकूल करू शकता हे हा लेख एक्सप्लोर करतो, ज्यामुळे गंभीर माहितीची खात्री करून तपासक ट्रेस डेटासह नोंदी न भरता निदानासाठी मॉड्यूल उपलब्ध आहे.

आज्ञा वापराचे उदाहरण
deque(maxlen=capacity) पासून दुहेरी टोकाची रांग संग्रह मॉड्यूल, येथे एक रिंग बफर तयार करण्यासाठी वापरले जाते ज्यामध्ये लॉग संदेशांची निश्चित संख्या असते, नवीन संदेश येतात तेव्हा सर्वात जुने टाकून देतात. अलीकडील संदेशांचा लॉग कार्यक्षमतेने राखण्यासाठी ही एक महत्त्वपूर्ण रचना आहे.
emit(self, record) सानुकूल लॉगिंग हँडलरमध्ये प्रत्येक लॉग मेसेज व्युत्पन्न केल्यावर त्यावर प्रक्रिया करण्यासाठी ओव्हरराइड केलेली पद्धत. ला लॉग संदेश जोडण्यासाठी ते जबाबदार आहे deque आमच्या कस्टम रिंग बफर सोल्यूशनमध्ये.
logging.handlers.MemoryHandler हा लॉगिंग हँडलर आहे जो मेमरीमध्ये लॉग संदेश बफर करतो. जेव्हा विशिष्ट लॉग पातळी गाठली जाते तेव्हा ते त्यांना फ्लश करते (या प्रकरणात, एरर). अधिक गंभीर घटना घडेपर्यंत लॉग संदेशांचे आउटपुट पुढे ढकलण्यासाठी हे उपयुक्त आहे.
flushLevel=logging.ERROR एक युक्तिवाद पास झाला मेमरी हँडलर लॉग लेव्हल निर्दिष्ट करण्यासाठी जे अंतिम गंतव्यस्थानावर (कन्सोल किंवा फाइल सारखे) बफर केलेल्या संदेशांचे फ्लशिंग ट्रिगर करते. एरर आली तरच आम्हाला डीबग लॉग दिसतील याची खात्री करते.
setTarget(stream_handler) मध्ये मेमरी हँडलर दृष्टिकोन, ही पद्धत लक्ष्य हँडलर सेट करते ज्यावर बफर केलेले लॉग फ्लश केले जातील. या प्रकरणात, लक्ष्य ए स्ट्रीमहँडलर, जे कन्सोलवर लॉग आउटपुट करते.
format(record) लॉगिंग मॉड्यूलच्या स्वरूपन प्रणालीचा भाग. सानुकूल हँडलरमध्ये, ही पद्धत लॉग रेकॉर्डला रिंग बफरमध्ये जोडण्यापूर्वी त्याचे स्वरूपन करते, ज्यामुळे सातत्यपूर्ण आणि वाचनीय आउटपुट मिळू शकते.
logger.addHandler(buffer_handler) लॉगरला सानुकूल किंवा मेमरी हँडलर संलग्न करते जेणेकरून ते हँडलरच्या कॉन्फिगरेशननुसार लॉग संदेशांवर प्रक्रिया करते (उदा., बफरिंग, गोलाकार संचयन इ.). ही कमांड खात्री करते की आमचा बफर लॉगिंगसाठी वापरला जातो.
logger.setLevel(logging.DEBUG) लॉगिंग संदेशांसाठी किमान तीव्रता पातळी परिभाषित करते. उदाहरणांमध्ये, ते सेट केले आहे डीबग करा, सर्व संदेश, कमी गंभीर संदेशांसह, कॅप्चर केले जातील आणि नंतरच्या तपासणीसाठी बफर केले जातील याची खात्री करून.

पायथनमधील त्रुटीवरील अलीकडील लॉग कार्यक्षमतेने कॅप्चर करणे

सादर केलेली पहिली स्क्रिप्ट ए सह सानुकूल लॉगिंग हँडलर वापरते deque पायथनची रचना संग्रह मॉड्यूल हे डेक रिंग बफर म्हणून कार्य करते, अलीकडील लॉग संदेशांची निश्चित संख्या धारण करते. हँडलर ओव्हरराइड करतो उत्सर्जन पद्धत, ज्याला प्रत्येक वेळी लॉग व्युत्पन्न केले जाते. या पद्धतीमध्ये, प्रत्येक लॉग संदेश फॉरमॅट केला जातो आणि नंतर डेकमध्ये जोडला जातो. डेकची कमाल लांबी असल्यामुळे, ते क्षमतेपर्यंत पोहोचल्यावर ते सर्वात जुने संदेश आपोआप टाकून देते. हे सोल्यूशन सर्वात अलीकडील लॉगचा प्रभावीपणे मागोवा घेते, हे सुनिश्चित करते की चेकर मॉड्यूलमधील अत्याधिक डीबग संदेश लॉग आऊटपुटवर परिणाम करत नाहीत परंतु जेव्हा रनर मॉड्यूलमध्ये त्रुटी येते तेव्हा ते उपलब्ध असतात.

रनर मॉड्यूलमध्ये त्रुटी आढळल्यास, स्क्रिप्ट सानुकूल पद्धत कॉल करते get_logs डेकमध्ये संग्रहित लॉग संदेश पुनर्प्राप्त करण्यासाठी. हे तुम्हाला तत्काळ एररच्या आधीच्या चेकरकडून लॉग मेसेजची तपासणी करण्यास अनुमती देते. या दृष्टिकोनामागील कल्पना अशी आहे की लॉग संदेश हे लॉग व्हर्बोसिटी आणि युटिलिटी दरम्यान संतुलन राखताना समस्यानिवारणासाठी महत्त्वपूर्ण संदर्भ प्रदान करतात. पायथनमध्ये गोलाकार लॉग बफर तयार करण्याचा हा एक सोपा आणि प्रभावी मार्ग आहे बॅकट्रेस C++ च्या spdlog लायब्ररीमध्ये वैशिष्ट्य आढळले.

दुसरा उपाय अंगभूत वापरतो मेमरी हँडलर पायथनच्या लॉगिंग मॉड्यूलमधून. मेमरीहँडलर मेमरीमध्ये लॉग संदेश बफर करून आणि विशिष्ट लॉग स्तर समोर आल्यावरच फ्लश करून कार्य करते, जसे की एरर. या प्रकरणात, हँडलरला 10 लॉग संदेशांपर्यंत बफर करण्यासाठी आणि त्रुटी आल्यावर फ्लश करण्यासाठी कॉन्फिगर केले जाते. हा दृष्टीकोन रिंग बफर तंत्रासारखाच आहे परंतु पायथनच्या विद्यमान लॉगिंग इन्फ्रास्ट्रक्चरचा वापर करते, जे अंमलबजावणी सुलभ करते. मेमरीहँडलर अशा परिस्थितींसाठी आदर्श आहे जिथे तुम्हाला लॉग संदेशांचा स्नॅपशॉट घ्यायचा आहे ज्यामुळे सामान्य ऑपरेशन्स दरम्यान लॉगमध्ये गोंधळ न करता त्रुटी येते.

दोन्ही उपाय कार्यक्षमतेसाठी ऑप्टिमाइझ केलेले आहेत आणि मेमरी वापर मर्यादित करण्यासाठी डिझाइन केलेले आहेत. मेमरीमध्ये संग्रहित लॉगची संख्या मर्यादित करून आणि गंभीर घटनांदरम्यान केवळ बफर फ्लश करून, ते स्वच्छ, व्यवस्थापित करण्यायोग्य लॉग राखण्यात मदत करतात. हे विकसकांना मोठ्या प्रमाणावर अनावश्यक माहिती शोधण्याऐवजी वास्तविक त्रुटी डीबग करण्यावर लक्ष केंद्रित करण्यास अनुमती देते. प्रश्नातील लॉगरमध्ये सानुकूल किंवा मेमरी हँडलर्स जोडून प्रत्येक स्क्रिप्ट विद्यमान पायथन लॉगिंग कॉन्फिगरेशनमध्ये सहजपणे समाकलित केली जाऊ शकते आणि दोन्ही विविध लॉग फॉरमॅट्स आणि स्तरांशी जुळवून घेण्यासाठी पुरेसे लवचिक आहेत.

सानुकूल रिंग बफरसह त्रुटीवर अलीकडील पायथन लॉगिंग संदेश कॅप्चर करणे

पायथन लॉगिंग मॉड्यूल - कस्टम रिंग बफर अंमलबजावणी

# Approach 1: Using a custom handler with a deque (ring buffer) to store recent logs
import logging
from collections import deque
# Custom log handler to store recent log messages
class BufferingHandler(logging.Handler):
    def __init__(self, capacity):
        super().__init__()
        self.log_buffer = deque(maxlen=capacity)  # Circular buffer
    def emit(self, record):
        self.log_buffer.append(self.format(record))  # Store formatted log messages
    def get_logs(self):
        return list(self.log_buffer)  # Retrieve recent log messages
# Configure logging with custom handler
logger = logging.getLogger('checker')
buffer_handler = BufferingHandler(capacity=10)
logger.addHandler(buffer_handler)
logger.setLevel(logging.DEBUG)
# Example log generation
for i in range(20):
    logger.debug(f"Debug message {i}")
# Simulate an error in runner and print the last few log messages
try:
    1 / 0  # Simulate error
except ZeroDivisionError:
    print("Error occurred, recent log messages:")
    for log in buffer_handler.get_logs():
        print(log)

Python मध्ये बफर लॉगिंगसाठी MemoryHandler वापरणे

Python लॉगिंग मॉड्यूल - MemoryHandler Approach

Python मध्ये लॉग संदेश कॅप्चर करण्यासाठी पर्यायी मार्ग शोधत आहे

Python मध्ये अलीकडील लॉग संदेश कॅप्चर करण्यासाठी आणखी एक दृष्टीकोन म्हणजे तृतीय-पक्ष लायब्ररी वापरणे loguru. Python च्या अंगभूत लॉगिंग मॉड्यूलच्या विपरीत, Loguru अधिक लवचिक आणि वापरकर्ता-अनुकूल इंटरफेस देते. यामध्ये लॉग फिरवणे, लॉग स्तर फिल्टर करणे आणि विविध फॉरमॅटमध्ये लॉग कॅप्चर करणे यासाठी अंगभूत समर्थन समाविष्ट आहे. हे लायब्ररी विशेषत: जास्त लॉग व्युत्पन्न करणाऱ्या ऍप्लिकेशन्ससह काम करताना उपयुक्त ठरू शकते, कारण त्रुटी हाताळताना गंभीर संदेश चुकणार नाहीत याची खात्री करून ते लॉग व्यवस्थापन सुलभ करते.

Loguru लॉग सिंक सेट करण्यासाठी परवानगी देतो, जे मेमरी, फाइल्स किंवा बाह्य सेवांमध्ये लॉग संग्रहित करण्यासाठी सानुकूलित केले जाऊ शकते. सानुकूल सिंक वापरून तुम्ही तात्पुरते इन-मेमरी बफर तयार करू शकता, जे नंतर त्रुटी आढळल्यावर फ्लश केले जाऊ शकते. ज्यांना मानक लॉगिंग लायब्ररी प्रमाणे हँडलर्स मॅन्युअली कॉन्फिगर न करता त्यांच्या लॉगिंग सिस्टमवर अधिक नियंत्रण हवे आहे त्यांच्यासाठी हे Loguru ला एक शक्तिशाली पर्याय बनवते.

Loguru चा आणखी एक फायदा असा आहे की तो विद्यमान लॉगिंग सिस्टीमसह सहज एकीकरण करण्यास अनुमती देतो, म्हणजे तुम्ही तुमचा संपूर्ण लॉगिंग सेटअप न बदलता Loguru वर स्विच करू शकता. कार्यप्रदर्शन आणि लॉग व्यवस्थापन महत्त्वपूर्ण असलेल्या जटिल अनुप्रयोगांशी व्यवहार करताना हे विशेषतः उपयुक्त ठरू शकते. शेवटी, Python चे लॉगिंग मॉड्यूल बहुतेक वापराच्या प्रकरणांसाठी पुरेसे आहे, Loguru सारख्या लायब्ररींचे अन्वेषण केल्याने लॉग संदेश प्रभावीपणे कॅप्चर आणि व्यवस्थापित करण्यासाठी अतिरिक्त लवचिकता आणि वापर सुलभता प्रदान करते.

Python मध्ये लॉग संदेश कॅप्चर करण्याबद्दल सामान्य प्रश्न

  1. मी लॉग संदेश शब्दशः मर्यादित कसे करू शकतो?
  2. वापरा logger.setLevel(logging.ERROR) डीबग आणि माहिती सारखे कमी तीव्रतेचे संदेश दडपण्यासाठी, फक्त त्रुटी दर्शवित आहे.
  3. मेमरीमध्ये अलीकडील लॉग संचयित करण्याचा सर्वोत्तम मार्ग कोणता आहे?
  4. सर्वात जुन्या नोंदी स्वयंचलितपणे टाकून देऊन, अलीकडील लॉग संदेश संचयित करण्यासाठी वापरला जाऊ शकतो.
  5. जेव्हा एखादी त्रुटी येते तेव्हा मी बफर केलेले लॉग कसे फ्लश करू?
  6. सह MemoryHandler, लॉग मेमरीमध्ये साठवले जातात आणि विशिष्ट लॉग स्तर ट्रिगर झाल्यावर फ्लश केले जातात, जसे की flushLevel=logging.ERROR.
  7. Python च्या लॉगिंगवर Loguru वापरण्याचा काय फायदा आहे?
  8. Loguru कमी बॉयलरप्लेट कोडसह लॉग सेटअप सुलभ करते आणि सुलभ फिल्टरिंग आणि लॉग फिरवणे यासारखी अधिक अंतर्ज्ञानी वैशिष्ट्ये प्रदान करते.
  9. मी सध्याच्या लॉगिंग कॉन्फिगरेशनसह Loguru समाकलित करू शकतो का?
  10. होय, Loguru डीफॉल्ट लॉगिंग हँडलर बदलून पायथनच्या अंगभूत लॉगिंग सिस्टमसह सहजतेने समाकलित करू शकतो.

लॉग कॅप्चर तंत्रांचा सारांश

त्रुटी-प्रवण परिस्थितींमध्ये, पायथनचे लॉगिंग मॉड्यूल कार्यक्षमतेने वापरल्याने आउटपुटमध्ये गोंधळ न करता अलीकडील लॉग संदेश कॅप्चर करण्यात मदत होते. सानुकूल हँडलर्स जसे deque आणि मेमरी हँडलर जेव्हा एखादी त्रुटी येते तेव्हा महत्त्वपूर्ण संदेश संचयित करण्याचे बहुमुखी मार्ग प्रदान करते.

हे उपाय उच्च शब्दशः मॉड्युलमधील त्रुटी डीबग करण्यासाठी व्यावहारिक आहेत, विकासकांकडे आवश्यक लॉग डेटा उपलब्ध असल्याची खात्री करून. सारख्या तृतीय-पक्ष साधने एकत्रित करून लोगुरु, किमान कॉन्फिगरेशनसह प्रगत लॉग व्यवस्थापन ऑफर करून, आणखी लवचिकता उपलब्ध आहे.

पायथन लॉगिंग सोल्यूशन्ससाठी स्रोत आणि संदर्भ
  1. पायथनचे स्पष्टीकरण deque अंमलबजावणी आणि लॉगिंगमध्ये त्याचा वापर: पायथन दस्तऐवजीकरण - संग्रह
  2. Python's वर तपशील लॉगिंग लायब्ररी आणि मेमरी हँडलर: पायथन दस्तऐवजीकरण - लॉगिंग
  3. चे विहंगावलोकन लोगुरु प्रगत पायथन लॉगिंग पर्याय म्हणून: Loguru दस्तऐवजीकरण
  4. ची तुलना आणि वापर spdlog बॅकट्रेस समर्थनासाठी C++ मध्ये: spdlog GitHub रेपॉजिटरी