تسجيل الدخول في C++: نظرة عامة على أفضل المكتبات والحلول

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

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

ابدأ الدورة

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



تسجيل الدخول هو أحد أهم الأدوات في ترسانة المطور. فهو يساعد في تتبع تنفيذ البرنامج، والعثور على الأخطاء، وتحليل الأداء، وجمع البيانات لتصحيح الأخطاء. لا تحتوي لغة C++ على نظام تسجيل دخول مدمج (على عكس Java أو Python)، لكن المجتمع والشركات الكبرى أنشأت العديد من المكتبات الممتازة. في هذه المقالة، سنستعرض أفضل الحلول لتسجيل الدخول في C++: spdlog، Boost.Log، Google glog و fmtlog. ستتعرف على ميزاتها ومزاياها وستحصل على أمثلة كود.



لماذا نحتاج إلى تسجيل الدخول في C++؟

في مشاريع C++ الحديثة، يحل تسجيل الدخول عدة مهام:

  • تصحيح الأخطاء: تسجيل قيم المتغيرات، مكدس الاستدعاءات، حالة الكائنات.
  • المراقبة: تثبيت وقت تنفيذ الدوال، عمليات الإدخال/الإخراج.
  • التدقيق: حفظ تاريخ إجراءات المستخدم أو النظام.
  • تشخيص الأعطال: تسجيل الاستثناءات والأخطاء الحرجة.

يجب أن تكون مكتبة تسجيل الدخول الجيدة سريعة ومرنة، وتدعم مستويات مختلفة من السجلات (debug، info، warn، error، fatal)، وأن تكون قادرة على إخراج البيانات إلى ملف أو وحدة تحكم أو خادم بعيد.



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

spdlog هي المكتبة الأكثر شيوعًا لتسجيل الدخول في C++ حاليًا. وهي مكتوبة بلغة C++ الحديثة (C++11/14/17)، وهي header-only (ملفات رأس فقط) وليس لها تبعيات خارجية باستثناء fmtlib لتنسيق السلاسل. المزايا الرئيسية:

  • أداء عالٍ (تسجيل غير متزامن).
  • دعم العديد من sinks: ملف، وحدة تحكم، syslog، قواعد بيانات.
  • تخصيص مرن للتنسيق.
  • API بسيط.

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

#include <spdlog/spdlog.h>#include <spdlog/sinks/basic_file_sink.h>

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

spdlog::info("Welcome to spdlog!"); spdlog::debug("Some debug message: {}", 42); spdlog::error("Error occurred: {}", errno);

// تسجيل غير متزامن spdlog::flush_on(spdlog::level::err); return 0;}

يدعم spdlog أيضًا الوضع غير المتزامن، وهو أمر بالغ الأهمية للتطبيقات عالية التحميل. إعداد عدم التزامن بسيط: فقط قم باستدعاء spdlog::init_thread_pool(...).



2. Boost.Log — قوي ولكنه ثقيل

Boost.Log هو جزء من مكتبات Boost. وهو الحل الأكثر وظيفية، لكنه يتطلب تثبيت Boost وقد يبطئ التجميع. الميزات:

  • أقصى مرونة: مرشحات مخصصة، منسقات، sinks.
  • دعم تعدد الخيوط وأمان التدفق.
  • إمكانية كتابة السجلات في أماكن متعددة في وقت واحد (ملف + وحدة تحكم + شبكة).
  • دعم تدوير السجلات حسب الحجم أو التاريخ أو الوقت.

مثال على Boost.Log:

#include <boost/log/trivial.hpp>#include <boost/log/expressions.hpp>#include <boost/log/utility/setup/file.hpp>

namespace logging = boost::log;

int main() { // إعداد الإخراج إلى ملف logging::add_file_log("sample.log"); logging::core::get()->set_filter( logging::trivial::severity >= logging::trivial::info );

BOOST_LOG_TRIVIAL(trace) << "A trace severity message"; BOOST_LOG_TRIVIAL(debug) << "A debug severity message"; BOOST_LOG_TRIVIAL(error) << "An error severity message"; return 0;}

Boost.Log هو اختيار

توصيات