spdlog للغة C++: دليل شامل مع أمثلة

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

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

ابدأ الدورة

ما هو spdlog ولماذا هو مطلوب؟

\n\n

spdlog هي مكتبة فائقة السرعة، تعتمد على الرؤوس فقط (header-only) لتسجيل السجلات في لغة C++، ويتم توزيعها بموجب ترخيص MIT. ميزتها الرئيسية هي الأداء المذهل، الذي يتحقق من خلال الكتابة غير المتزامنة، والحد الأدنى من تخصيص الذاكرة، واستخدام الإمكانيات الحديثة لـ C++11/14/17. في اختبارات الأداء، غالبًا ما تكون spdlog أسرع بمقدار 5-10 مرات من المكتبات مثل glog أو Boost.Log.

\n\n

لماذا استخدام spdlog؟ في أي تطبيق C++ غير تافه، تسجيل السجلات ليس ترفًا، بل ضرورة. فهو يساعد في:

\n
    \n
  • تصحيح الأخطاء في بيئة الإنتاج، حيث لا يوجد مصحح أخطاء.
  • \n
  • تتبع تدفق التنفيذ للبرنامج (التتبع).
  • \n
  • تحليل الأداء (قياس وقت تنفيذ أجزاء الكود).
  • \n
  • إجراء تدقيق أمني (تسجيل محاولات الدخول، تغييرات البيانات).
  • \n
\n\n

توفر spdlog نظامًا مرنًا: يمكنك كتابة السجلات في وحدة التحكم، في ملفات (بما في ذلك التدوير حسب الحجم أو الوقت)، في سجل النظام (syslog)، في قاعدة بيانات (عبر ODBC)، أو حتى إرسالها عبر الشبكة. يتم دعم الوضع غير المتزامن، الذي يسمح بعدم حظر الخيط الرئيسي للتطبيق عند كتابة السجلات.

\n\n

تثبيت spdlog

\n\n

على عكس Python، لا يوجد في C++ مدير حزم واحد، ولكن هناك عدة طرق قياسية لتثبيت spdlog.

\n\n

الطريقة 1: Header-only (موصى بها للمبتدئين)

\n

أسهل طريقة هي تنزيل ملفات الرأس وتضمينها ببساطة في المشروع. لا حاجة لأي تجميع.

\n
    \n
  1. قم بتنزيل أحدث إصدار من GitHub.
  2. \n
  3. قم بفك ضغط الأرشيف.
  4. \n
  5. انسخ المجلد include/spdlog إلى مشروعك.
  6. \n
  7. في الكود، استخدم #include "spdlog/spdlog.h".
  8. \n
\n\n

الطريقة 2: عبر مدير الحزم vcpkg

\n

vcpkg هو مدير حزم شائع للغة C++ من Microsoft.

\n
# التثبيت\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n./bootstrap-vcpkg.sh  # أو bootstrap-vcpkg.bat على Windows\n./vcpkg install spdlog\n\n# التكامل مع نظام البناء الخاص بك\n./vcpkg integrate install
\n\n

الطريقة 3: عبر Conan

\n

Conan هو مدير حزم شائع آخر.

\n
# في ملف conanfile.txt\n[requires]\nspdlog/1.12.0\n\n[generators]\ncmake_find_package\n\n# التثبيت\nconan install . --build=missing
\n\n

الطريقة 4: CMake FetchContent (نهج حديث)

\n

إذا كنت تستخدم CMake، يمكنك سحب المكتبة مباشرة من المستودع:

\n
include(FetchContent)\nFetchContent_Declare(\n  spdlog\n  GIT_REPOSITORY https://github.com/gabime/spdlog.git\n  GIT_TAG v1.12.0\n)\nFetchContent_MakeAvailable(spdlog)\n\n# في target الخاص بك\ntarget_link_libraries(my_app PRIVATE spdlog::spdlog)
\n\n

بداية سريعة مع مثال كود

\n\n

لنكتب برنامجًا بسيطًا يعرض سجلات بمستويات مختلفة في وحدة التحكم وفي ملف.

\n\n
#include "spdlog/spdlog.h"\n#include "spdlog/sinks/basic_file_sink.h"\n#include <memory>\n\nint main() {\n    // 1. إنشاء مسجل لوحدة التحكم (ملون افتراضيًا)\n    auto console = spdlog::stdout_color_mt("console");\n\n    // 2. إنشاء مسجل للملف\n    auto file_logger = spdlog::basic_logger_mt("file_logger", "logs/app.log");\n\n    // 3. تعيين مستوى التسجيل (افتراضيًا - trace)\n    spdlog::set_level(spdlog::level::trace);\n\n    // 4. كتابة رسائل بمستويات مختلفة\n    console->trace("هذه رسالة trace (المستوى الأكثر تفصيلاً)");\n    console->debug("Debug: قيمة المتغير x = {}", 42);\n    console->info("تم تشغيل البرنامج بنجاح");\n    console->warn("تحذير: الذاكرة على وشك النفاد");\n    console->error("خطأ: تعذر فتح الملف");\n    console->critical("خطأ                    

توصيات