تسجيل السجلات لـ 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) هي مكتبة موجهة نحو أقصى أداء وأقل تأثير على زمن الاستجابة للتطبيق. تستخدم قائمة انتظار غير متزامنة وتقلل من عمليات القفل. مثالية لمحركات الألعاب والأنظمة المالية و
أيضاً في المكتبة
إرسال SMS باستخدام PHP: نظرة عامة على مكتبات API للتكامل
معالجة JSON في C# (.NET): دليل كامل لـ Newtonsoft.Json و System.Text.Json
FluentValidation لـ C# (.NET): دليل شامل مع أمثلة
استخدام GraphQL في Swift: مكتبات Apollo و Relay لنظامي iOS/macOS
التحقق من صحة البيانات في Swift (iOS/macOS): المكتبات والمنهجيات