ما هو spdlog ولماذا هو مطلوب؟
\n\nspdlog هي مكتبة فائقة السرعة، تعتمد على الرؤوس فقط (header-only) لتسجيل السجلات في لغة C++، ويتم توزيعها بموجب ترخيص MIT. ميزتها الرئيسية هي الأداء المذهل، الذي يتحقق من خلال الكتابة غير المتزامنة، والحد الأدنى من تخصيص الذاكرة، واستخدام الإمكانيات الحديثة لـ C++11/14/17. في اختبارات الأداء، غالبًا ما تكون spdlog أسرع بمقدار 5-10 مرات من المكتبات مثل glog أو Boost.Log.
\n\nلماذا استخدام spdlog؟ في أي تطبيق C++ غير تافه، تسجيل السجلات ليس ترفًا، بل ضرورة. فهو يساعد في:
\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
- قم بتنزيل أحدث إصدار من GitHub. \n
- قم بفك ضغط الأرشيف. \n
- انسخ المجلد
include/spdlogإلى مشروعك. \n - في الكود، استخدم
#include "spdlog/spdlog.h". \n
الطريقة 2: عبر مدير الحزم vcpkg
\nvcpkg هو مدير حزم شائع للغة 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
\nConan هو مدير حزم شائع آخر.
\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، يمكنك سحب المكتبة مباشرة من المستودع:
\ninclude(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("خطأ