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

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

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

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

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

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

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

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

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

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

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

جب رنر ماڈیول میں کسی غلطی کا پتہ چل جاتا ہے، تو اسکرپٹ اپنی مرضی کے طریقہ کو کال کرتا ہے۔ get_logs ڈیک میں محفوظ کردہ لاگ پیغامات کو بازیافت کرنے کے لیے۔ یہ آپ کو چیکر سے لاگ ان پیغامات کا معائنہ کرنے کی اجازت دیتا ہے جو غلطی سے فوراً پہلے تھے۔ اس نقطہ نظر کے پیچھے خیال یہ ہے کہ لاگ پیغامات لاگ وربوسٹی اور افادیت کے درمیان توازن برقرار رکھتے ہوئے خرابیوں کے حل کے لیے اہم سیاق و سباق فراہم کرتے ہیں۔ یہ 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 کا لاگنگ ماڈیول زیادہ تر استعمال کے معاملات کے لیے کافی ہے، لوگورو جیسی لائبریریوں کو تلاش کرنا لاگ پیغامات کو مؤثر طریقے سے کیپچر کرنے اور ان کا انتظام کرنے کے لیے اضافی لچک اور استعمال میں آسانی فراہم کرتا ہے۔

Python میں لاگ پیغامات کیپچر کرنے کے بارے میں عام سوالات

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

لاگ کیپچر کی تکنیکوں کا خلاصہ

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

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

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