تسجيل السجلات لـ C++: أفضل الحلول (spdlog, glog, P7)

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تسجيل السجلات لـ C++: أفضل الحلول

تسجيل السجلات هو جانب بالغ الأهمية في تطوير أي تطبيق جاد بلغة C++. يسمح نظام تسجيل السجلات المضبوط بشكل صحيح بتتبع حالة البرنامج، واكتشاف الأخطاء، وإجراء التدقيق والتصحيح في بيئة الإنتاج. على عكس std::cout البسيط، توفر المكتبات الاحترافية مستويات أهمية (trace، debug، info، warn، error، fatal)، وتدوير الملفات، والكتابة غير المتزامنة، وتأثير ضئيل على الأداء. في هذه المقالة، سنستعرض ثلاثة من أفضل الحلول لـ C++: spdlog وGoogle glog وP7.



1. spdlog — مسجل سريع وحديث

spdlog هي مكتبة رأسية (header-only) مكتوبة بلغة C++11/14/17. تعتبر واحدة من أسرع المسجلات في بيئة C++. المزايا الرئيسية: دعم الوضع غير المتزامن، وتنسيقات إخراج متعددة (وحدة التحكم، ملف، syslog، مخصصة)، وإخراج ملون لوحدة التحكم، واستهلاك ضئيل للذاكرة.



مثال على الاستخدام الأساسي:

#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"

int main() { // إنشاء مسجل ملفات auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log"); // تعيين مستوى التسجيل spdlog::set_level(spdlog::level::debug);

// تسجيل الرسائل spdlog::info("تم تشغيل التطبيق"); file_logger->warn("حاول المستخدم {} تسجيل الدخول بكلمة مرور خاطئة", "admin"); file_logger->error("خطأ في الاتصال بقاعدة البيانات: {}", 404);

// التسجيل غير المتزامن spdlog::flush_every(std::chrono::seconds(3)); return 0;}


الميزات الرئيسية:

  • الأداء: يصل إلى 5-10 ملايين رسالة في الثانية في الوضع غير المتزامن.
  • المرونة: دعم sinks (مخرجات) — وحدة التحكم، ملف، syslog، Telegram، Kafka.
  • تدوير الملفات: إنشاء سجلات تلقائيًا حسب الحجم أو الوقت.
  • الإخراج الملون: تلوين المستويات للتشخيص البصري السريع.


2. Google glog — مسجل مجرب عبر الزمن

Google glog (glog) هي مكتبة من Google، تم تطويرها للاحتياجات الداخلية للشركة. إنها بسيطة وموثوقة ومناسبة تمامًا لتطبيقات الخادم. يركز التركيز الرئيسي على تصنيف السجلات والكتابة التلقائية في الملفات.



مثال على الاستخدام:

#include <glog/logging.h>

int main(int argc, char* argv[]) { google::InitGoogleLogging(argv[0]);

// إعداد الإخراج إلى ملف FLAGS_log_dir = "./logs"; FLAGS_stderrthreshold = 1; // إظهار WARNING وما فوق في stderr

LOG(INFO) << "تم تشغيل الخادم على المنفذ " << 8080; LOG(WARNING) << "مستوى ذاكرة منخفض: " << 512 << " MB"; LOG(ERROR) << "فشل فتح ملف التكوين";

// التسجيل الشرطي int x = 5; LOG_IF(INFO, x > 3) << "x أكبر من 3";

google::ShutdownGoogleLogging(); return 0;}


ميزات glog:

  • التدوير التلقائي: يتم إنشاء الملفات حسب اليوم والحجم.
  • التسجيل الشرطي: LOG_IF، CHECK للتحقق.
  • دعم الإشارات: يسجل تلقائيًا تفريغ المكدس عند التعطل.
  • الحد الأدنى من التكوين: يعمل "مباشرة من الصندوق".


3. P7 — مسجل للأنظمة عالية التحميل

P7 (أو P7::Logger) هي مكتبة موجهة نحو أقصى أداء وأقل تأثير على زمن الاستجابة للتطبيق. تستخدم قائمة انتظار غير متزامنة وتقلل من عمليات القفل. مثالية لمحركات الألعاب والأنظمة المالية و

توصيات