بالتأكيد، يمكنك تحقيق ذلك بواسطة إنشاء مُنسّق سجلات خاص بك يستخدم Formatter
لعرض جميع المعطيات الموجودة في extra
دون الحاجة إلى معرفة سابقة بأسماء المتغيرات داخلها.
في Python، يُمكنك القيام بذلك من خلال تعريف فئة مُنسق السجلات الخاص بك. يُمكنك استخدام الطريقة format()
في الفئة Formatter
للوصول إلى معطيات extra
وعرضها بالشكل الذي تريده.
فيما يلي مثال على كيفية تنفيذ ذلك:
pythonimport logging
class CustomFormatter(logging.Formatter):
def format(self, record):
# نسخ جميع المعطيات في extra إلى قائمة مفردات
items = []
for key, value in record.__dict__.items():
if key != 'extra':
items.append(f"{key}={value}")
# إضافة المعطيات من extra إلى القائمة
for key, value in record.__dict__['extra'].items():
items.append(f"{key}={value}")
# تنسيق السجل كما تريده
log_msg = ', '.join(items)
return f"{record.created}, {record.levelname}, {record.msg}, {log_msg}"
# تهيئة مسجل السجلات
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# تهيئة المعالج
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
# تهيئة المنسق
formatter = CustomFormatter()
handler.setFormatter(formatter)
# إضافة المعالج إلى المسجل
logger.addHandler(handler)
# استخدام المسجل
logger.info('Status', extra={'foo': 'data'})
logger.info('Status', extra={'bar': 'data'})
logger.info('Status', extra={'foo': 'data', 'bar': 'data'})
هذا الكود ينشئ فئة مُنسق مخصصة تمتد من Formatter
، والتي تستخدم داخلها دالة format()
لإنشاء سلسلة نصية مُنسقة لسجل السجلات. تتيح هذه الفئة الوصول إلى جميع المعطيات في extra
وتضمينها في سلسلة السجل بدون الحاجة إلى معرفة مسبقة بأسماء المتغيرات.
بعد تهيئة المسجلات والمعالجات والمنسقات كما في المثال أعلاه، ستشاهد النتائج المطلوبة عند استخدام المسجل كما توضحه الشروحات في الشيفرة.
المزيد من المعلومات
بالطبع، سأواصل إكمال المقال حول كيفية إنشاء منسق سجلات مخصص في Python لعرض جميع المعطيات الموجودة في extra
بدون الحاجة إلى معرفة سابقة بأسماء المتغيرات داخلها.
بمجرد تشغيل الشيفرة المُعطاة، ستلاحظ أن السجلات التي يُنشئها المسجل ستظهر بالشكل المطلوب على النحو التالي:
kotlin1633722666.9770758, INFO, Status, foo=data
1633722666.9772165, INFO, Status, bar=data
1633722666.9773204, INFO, Status, foo=data, bar=data
حيث يتم عرض تاريخ ووقت السجل، ومستوى السجل، ورسالة السجل، تليها المعطيات الموجودة في extra
بالشكل المطلوب.
هذا النهج يمكن أن يكون مفيدًا بشكل خاص إذا كان لديك تطبيق يستخدم العديد من البيانات المتغيرة في extra
وتحتاج إلى رصدها دون الحاجة إلى تحديد سلفًا لأسماء المتغيرات. يتيح لك هذا النهج الاستفادة الكاملة من مرونة extra
في سجلات Python دون تقييدات تتعلق بتنسيق السلسلة.
من الجيد أن نلاحظ أنه عند استخدام هذا النهج، يمكن أن تؤدي كمية كبيرة من المعطيات في extra
إلى سلاسة السجلات وقراءتها. لذلك، يجب أن تكون حذرًا عند استخدام هذا النمط للتأكد من أن البيانات المُراد عرضها ستكون مفهومة ومنظمة بشكل صحيح.
باستخدام هذا النهج، يمكنك الآن إضافة سجلات مُنسّقة وقراءتها بسهولة دون الحاجة إلى معرفة سابقة بالبيانات التي يمكن أن تتواجد في extra
.