$lang['tuto'] = "سبق"; ?> غلطیوں کے دوران حالیہ ازگر لاگنگ

غلطیوں کے دوران حالیہ ازگر لاگنگ پیغامات کو کیسے بازیافت کریں۔

غلطیوں کے دوران حالیہ ازگر لاگنگ پیغامات کو کیسے بازیافت کریں۔
Logging

ایرر ہینڈلنگ کے لیے ازگر لاگنگ کو بہتر بنانا

پروگرام کی تکمیل کے دوران واقعات سے باخبر رہنے اور مسائل کی تشخیص کے لیے Python میں لاگ ان کرنا ضروری ہے۔ تاہم، بعض ماڈیولز ضرورت سے زیادہ ٹریس کی معلومات پیدا کر سکتے ہیں، جو لاگز کو بے ترتیبی کر سکتے ہیں۔ ایسی صورتوں میں، لاگنگ کی مناسب سطح کا تعین کرنا، جیسے ، غیر ضروری تفصیلات کو فلٹر کرنے میں مدد کرسکتا ہے۔

ایسے منظرناموں میں جہاں ایک ماڈیول ضرورت سے زیادہ لاگز تیار کرتا ہے، لیکن دوسرے ماڈیول میں اسے کال کرنے میں غلطیاں ہوتی ہیں، حالیہ لاگ پیغامات تک رسائی بہت اہم ہو جاتی ہے۔ یہ اکثر ایسا ہوتا ہے جب کسی خرابی کی اصل وجہ کا سراغ لگاتے ہو۔ ضرورت سے زیادہ لاگز کو نظر انداز کرنے اور اہم کو کیپچر کرنے کے درمیان توازن کی ضرورت ہے۔

لائبریریاں جیسے C++ میں ایک رِنگ بفر کے ذریعے بیک ٹریکنگ کے لیے بلٹ ان سپورٹ ہے، جس سے ڈویلپرز کو حالیہ لاگز کا جائزہ لینے کی اجازت ملتی ہے جس کی وجہ سے خرابی ہوتی ہے۔ ازگر کا تاہم، لائبریری اس خصوصیت کو باکس سے باہر پیش نہیں کرتی ہے، جس سے یہ سوال پیدا ہوتا ہے کہ اسی طرح کے طریقہ کار کو کیسے نافذ کیا جائے۔

یہ مضمون اس بات کی کھوج کرتا ہے کہ آپ Python کے لاگنگ سسٹم کو حالیہ لاگ پیغامات کیپچر کرنے کے لیے کیسے ڈھال سکتے ہیں جب کوئی خرابی واقع ہوتی ہے، اس سے اہم معلومات کو یقینی بناتے ہوئے ماڈیول ٹریس ڈیٹا کے ساتھ لاگز کو مغلوب کیے بغیر تشخیص کے لیے دستیاب ہے۔

حکم استعمال کی مثال
deque(maxlen=capacity) کی طرف سے ایک دوہری قطار ماڈیول، یہاں ایک رنگ بفر بنانے کے لیے استعمال کیا جاتا ہے جس میں لاگ پیغامات کی ایک مقررہ تعداد ہوتی ہے، نئے پیغامات آنے پر سب سے پرانے پیغامات کو رد کر دیتے ہیں۔ حالیہ پیغامات کے لاگ کو مؤثر طریقے سے برقرار رکھنے کے لیے یہ ایک اہم ڈھانچہ ہے۔
emit(self, record) اپنی مرضی کے لاگنگ ہینڈلرز میں اوور رائیڈ شدہ طریقہ ہر لاگ میسج پر کارروائی کے لیے جیسا کہ یہ تیار ہوتا ہے۔ یہ لاگ پیغام کو شامل کرنے کے لیے ذمہ دار ہے۔ ہمارے کسٹم رنگ بفر حل میں۔
logging.handlers.MemoryHandler یہ ایک لاگنگ ہینڈلر ہے جو لاگ پیغامات کو میموری میں بفر کرتا ہے۔ یہ ان کو فلش کرتا ہے جب لاگ ان کی ایک مخصوص سطح تک پہنچ جاتی ہے (اس صورت میں، )۔ لاگ میسجز کے آؤٹ پٹ کو اس وقت تک موخر کرنے کے لیے مفید ہے جب تک کہ کوئی زیادہ سنگین واقعہ پیش نہ آجائے۔
flushLevel=logging.ERROR کے پاس ایک دلیل گزر گئی۔ لاگ لیول کی وضاحت کرنے کے لیے جو بفرڈ پیغامات کو حتمی منزل تک لے جانے کو متحرک کرتا ہے (جیسے کنسول یا فائل)۔ یہ یقینی بناتا ہے کہ اگر کوئی خرابی ہوتی ہے تو ہم صرف ڈیبگ لاگز دیکھتے ہیں۔
setTarget(stream_handler) میں نقطہ نظر، یہ طریقہ ہدف ہینڈلر کو متعین کرتا ہے جس پر بفر شدہ لاگز فلش کیے جائیں گے۔ اس صورت میں، ہدف ہے a ، جو کنسول میں لاگ آؤٹ پٹ کرتا ہے۔
format(record) لاگنگ ماڈیول کے فارمیٹنگ سسٹم کا حصہ۔ کسٹم ہینڈلر میں، یہ طریقہ لاگ ریکارڈ کو رنگ بفر میں شامل کرنے سے پہلے فارمیٹ کرتا ہے، جس سے مستقل اور پڑھنے کے قابل آؤٹ پٹ کی اجازت ہوتی ہے۔
logger.addHandler(buffer_handler) اپنی مرضی کے مطابق یا میموری ہینڈلر کو لاگر کے ساتھ منسلک کرتا ہے تاکہ یہ ہینڈلر کی ترتیب کے مطابق لاگ پیغامات پر کارروائی کرے (جیسے، بفرنگ، سرکلر اسٹوریج وغیرہ)۔ یہ کمانڈ یقینی بناتی ہے کہ ہمارا بفر لاگنگ کے لیے استعمال ہوتا ہے۔
logger.setLevel(logging.DEBUG) لاگ ان پیغامات کے لیے کم از کم شدت کی سطح کی وضاحت کرتا ہے۔ مثالوں میں، یہ مقرر کیا گیا ہے اس بات کو یقینی بناتے ہوئے کہ تمام پیغامات، بشمول کم شدید پیغامات، کیپچر کیے گئے ہیں اور بعد میں معائنے کے لیے بفر کیے گئے ہیں۔

Python میں خرابی پر حالیہ لاگز کو مؤثر طریقے سے پکڑنا

پیش کردہ پہلی اسکرپٹ ایک کے ساتھ اپنی مرضی کے لاگنگ ہینڈلر کا استعمال کرتی ہے۔ ازگر کی ساخت ماڈیول یہ ڈیک ایک رنگ بفر کے طور پر کام کرتا ہے، جس میں حالیہ لاگ پیغامات کی ایک مقررہ تعداد ہوتی ہے۔ ہینڈلر اوور رائیڈ کرتا ہے۔ طریقہ، جسے ہر بار لاگ تیار کرنے پر کہا جاتا ہے۔ اس طریقہ میں، ہر لاگ پیغام کو فارمیٹ کیا جاتا ہے اور پھر ڈیک میں شامل کیا جاتا ہے۔ چونکہ ڈیک کی زیادہ سے زیادہ لمبائی ہوتی ہے، اس لیے یہ خود بخود سب سے پرانے پیغامات کو ضائع کر دیتا ہے جب یہ صلاحیت تک پہنچ جاتا ہے۔ یہ حل مؤثر طریقے سے تازہ ترین لاگز کو ٹریک کرتا ہے، اس بات کو یقینی بناتا ہے کہ چیکر ماڈیول سے ضرورت سے زیادہ ڈیبگ پیغامات لاگ آؤٹ پٹ کو مغلوب نہیں کرتے ہیں لیکن جب رنر ماڈیول میں کوئی خرابی واقع ہوتی ہے تو پھر بھی دستیاب ہوتے ہیں۔

جب رنر ماڈیول میں کسی غلطی کا پتہ چل جاتا ہے، تو اسکرپٹ اپنی مرضی کے طریقہ کو کال کرتا ہے۔ ڈیک میں محفوظ کردہ لاگ پیغامات کو بازیافت کرنے کے لیے۔ یہ آپ کو چیکر سے لاگ ان پیغامات کا معائنہ کرنے کی اجازت دیتا ہے جو غلطی سے فوراً پہلے تھے۔ اس نقطہ نظر کے پیچھے خیال یہ ہے کہ لاگ پیغامات لاگ وربوسٹی اور افادیت کے درمیان توازن برقرار رکھتے ہوئے خرابیوں کے حل کے لیے اہم سیاق و سباق فراہم کرتے ہیں۔ یہ Python میں سرکلر لاگ بفر بنانے کا ایک آسان اور موثر طریقہ ہے، جیسا کہ خصوصیت C++ کی spdlog لائبریری میں پائی جاتی ہے۔

دوسرا حل بلٹ ان کا استعمال کرتا ہے۔ ازگر کے لاگنگ ماڈیول سے۔ MemoryHandler لاگ میسجز کو میموری میں بفر کرکے اور صرف اس وقت فلش کرکے کام کرتا ہے جب کسی مخصوص لاگ لیول کا سامنا ہوتا ہے، جیسے کہ . اس صورت میں، ہینڈلر کو 10 لاگ پیغامات تک بفر کرنے اور غلطی ہونے پر انہیں فلش کرنے کے لیے ترتیب دیا گیا ہے۔ یہ نقطہ نظر رنگ بفر تکنیک سے ملتا جلتا ہے لیکن Python کے موجودہ لاگنگ انفراسٹرکچر کا استعمال کرتا ہے، جو عمل درآمد کو آسان بناتا ہے۔ MemoryHandler ان منظرناموں کے لیے مثالی ہے جہاں آپ لاگ پیغامات کا اسنیپ شاٹ لینا چاہتے ہیں جو عام کارروائیوں کے دوران لاگز کو بے ترتیبی کیے بغیر غلطی کا باعث بنتے ہیں۔

دونوں حل کارکردگی کے لیے موزوں ہیں اور میموری کی کھپت کو محدود کرنے کے لیے ڈیزائن کیے گئے ہیں۔ یادداشت میں ذخیرہ شدہ لاگز کی تعداد کو محدود کرکے اور صرف اہم واقعات کے دوران بفر کو فلش کرکے، وہ صاف، قابل انتظام لاگز کو برقرار رکھنے میں مدد کرتے ہیں۔ یہ ڈویلپرز کو غیر ضروری معلومات کی وسیع مقدار کو چھاننے کے بجائے اصل غلطی کو ٹھیک کرنے پر توجہ مرکوز کرنے کی اجازت دیتا ہے۔ ہر اسکرپٹ کو آسانی سے موجودہ Python لاگنگ کنفیگریشنز میں شامل کیا جا سکتا ہے صرف اپنی مرضی کے مطابق یا میموری ہینڈلرز کو زیر غور لاگر میں شامل کر کے، اور دونوں کافی لچکدار ہیں کہ مختلف لاگ فارمیٹس اور لیولز کے مطابق ڈھال سکیں۔

اپنی مرضی کے رنگ بفر کے ساتھ غلطی پر حالیہ ازگر کے لاگنگ پیغامات کیپچر کرنا

Python لاگنگ ماڈیول - اپنی مرضی کے مطابق رنگ بفر کا نفاذ

# 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 2: Using MemoryHandler to buffer log messages
import logging
# MemoryHandler buffers log records in memory and flushes them when conditions are met
memory_handler = logging.handlers.MemoryHandler(capacity=10, flushLevel=logging.ERROR)
# Configuring logging with a stream handler for output
stream_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
stream_handler.setFormatter(formatter)
# Attach the memory handler and stream handler to logger
logger = logging.getLogger('checker')
logger.setLevel(logging.DEBUG)
memory_handler.setTarget(stream_handler)
logger.addHandler(memory_handler)
# Generating some debug messages
for i in range(15):
    logger.debug(f"Debug message {i}")
# Simulate an error that will trigger the buffer to flush
logger.error("An error occurred in runner")
# The memory handler will now flush its buffer and show the last 10 messages

Python میں لاگ پیغامات کیپچر کرنے کے متبادل طریقے تلاش کرنا

Python میں حالیہ لاگ میسجز کیپچر کرنے کے لیے ایک اور نقطہ نظر میں تھرڈ پارٹی لائبریری کا استعمال شامل ہے جیسے . Python کے بلٹ ان لاگنگ ماڈیول کے برعکس، لوگورو زیادہ لچکدار اور صارف دوست انٹرفیس پیش کرتا ہے۔ اس میں لاگز کو گھومنے، لاگ لیولز کو فلٹر کرنے اور مختلف فارمیٹس میں لاگز کیپچر کرنے کے لیے بلٹ ان سپورٹ شامل ہے۔ یہ لائبریری خاص طور پر مفید ہو سکتی ہے جب ایپلی کیشنز کے ساتھ کام کرتے ہیں جو ضرورت سے زیادہ لاگ تیار کرتی ہیں، کیونکہ یہ لاگ مینجمنٹ کو آسان بناتی ہے اور اس بات کو یقینی بناتی ہے کہ غلطی سے نمٹنے کے دوران اہم پیغامات چھوٹ نہ جائیں۔

لوگورو لاگ سنک ترتیب دینے کی اجازت دیتا ہے، جسے میموری، فائلوں، یا یہاں تک کہ بیرونی خدمات میں لاگز کو ذخیرہ کرنے کے لیے اپنی مرضی کے مطابق بنایا جا سکتا ہے۔ آپ حسب ضرورت سنک کا استعمال کرتے ہوئے ایک عارضی ان میموری بفر بنا سکتے ہیں، جسے پھر غلطی کا سامنا کرنے پر فلش کیا جا سکتا ہے۔ یہ لوگورو کو ان لوگوں کے لیے ایک طاقتور متبادل بناتا ہے جو معیاری لاگنگ لائبریری کی طرح ہینڈلرز کو دستی طور پر کنفیگر کیے بغیر اپنے لاگنگ سسٹم پر زیادہ کنٹرول چاہتے ہیں۔

لوگورو کا ایک اور فائدہ یہ ہے کہ یہ موجودہ لاگنگ سسٹمز کے ساتھ آسانی سے انضمام کی اجازت دیتا ہے، یعنی آپ اپنے پورے لاگنگ سیٹ اپ کو اوور ہال کیے بغیر لوگورو پر جا سکتے ہیں۔ یہ خاص طور پر اس وقت مددگار ثابت ہو سکتا ہے جب پیچیدہ ایپلی کیشنز سے نمٹنے کے لیے جہاں کارکردگی اور لاگ مینجمنٹ بہت ضروری ہے۔ بالآخر، جبکہ Python کا لاگنگ ماڈیول زیادہ تر استعمال کے معاملات کے لیے کافی ہے، لوگورو جیسی لائبریریوں کو تلاش کرنا لاگ پیغامات کو مؤثر طریقے سے کیپچر کرنے اور ان کا انتظام کرنے کے لیے اضافی لچک اور استعمال میں آسانی فراہم کرتا ہے۔

  1. میں لاگ میسج کی وربوسٹی کو کیسے محدود کر سکتا ہوں؟
  2. استعمال کریں۔ ڈیبگ اور معلومات جیسے کم شدت والے پیغامات کو دبانے کے لیے، صرف غلطیاں دکھا رہا ہے۔
  3. میموری میں حالیہ لاگز کو ذخیرہ کرنے کا بہترین طریقہ کیا ہے؟
  4. اے سب سے پرانی اندراجات کو خودکار طور پر رد کرنے کے ساتھ، حالیہ لاگ پیغامات کو ذخیرہ کرنے کے لیے استعمال کیا جا سکتا ہے۔
  5. جب کوئی خرابی پیش آتی ہے تو میں بفر شدہ لاگز کو کیسے فلش کروں؟
  6. کے ساتھ ، لاگز میموری میں محفوظ ہوتے ہیں اور جب ایک مخصوص لاگ لیول کو متحرک کیا جاتا ہے تو فلش کیا جاتا ہے، جیسے .
  7. Python کی لاگنگ پر Loguru استعمال کرنے کا کیا فائدہ ہے؟
  8. کم بوائلر پلیٹ کوڈ کے ساتھ لاگ سیٹ اپ کو آسان بناتا ہے اور آسان فلٹرنگ اور لاگز کو گھومنے جیسی مزید بدیہی خصوصیات فراہم کرتا ہے۔
  9. کیا میں لوگورو کو موجودہ لاگنگ کنفیگریشن کے ساتھ ضم کر سکتا ہوں؟
  10. ہاں، لوگو ڈیفالٹ لاگنگ ہینڈلر کو بدل کر ازگر کے بلٹ ان لاگنگ سسٹم کے ساتھ آسانی سے ضم کر سکتا ہے۔

خرابی کے شکار حالات میں، Python کے لاگنگ ماڈیول کا استعمال مؤثر طریقے سے آؤٹ پٹ کو بے ترتیبی کے بغیر حالیہ لاگ پیغامات کو حاصل کرنے میں مدد کرتا ہے۔ حسب ضرورت ہینڈلرز جیسے اور جب کوئی غلطی ہوتی ہے تو اہم پیغامات کو ذخیرہ کرنے کے ورسٹائل طریقے فراہم کرتے ہیں۔

یہ حل ماڈیولز میں اعلی فعل کے ساتھ غلطیوں کو ٹھیک کرنے کے لیے عملی ہیں، اس بات کو یقینی بناتے ہوئے کہ ڈویلپرز کے پاس ضروری لاگ ڈیٹا دستیاب ہو۔ جیسے تھرڈ پارٹی ٹولز کو ضم کرکے ، اور بھی زیادہ لچک دستیاب ہے، کم سے کم ترتیب کے ساتھ جدید لاگ مینجمنٹ کی پیشکش۔

  1. ازگر کی وضاحت لاگنگ میں عمل درآمد اور اس کا استعمال: ازگر کی دستاویزات - مجموعے۔
  2. Python کی تفصیلات لائبریری اور میموری ہینڈلر: ازگر کی دستاویزات - لاگنگ
  3. کا جائزہ ایک جدید ازگر لاگنگ متبادل کے طور پر: لوگورو دستاویزات
  4. کا موازنہ اور استعمال بیک ٹریس سپورٹ کے لیے C++ میں: spdlog GitHub ذخیرہ