Reference OS v8 5 دقائق قراءة ١ يوليو ٢٠٢٦ informational: فهم أداة تسجيل جديدة وتقييمها وتجربتها عملياً Light-Weight Logger: دليل عملي لمكتبة تسجيل مخصصة بلغات C++ وJava وC# ستتعلم كيفية تركيب…

Show HN: C++, Java and C# light-weight-logger
اختر القسم الذي تحتاجه الآن
الفكرة التي تمنع التسرع
تخيل أنك تريد تسجيل خطأ في تطبيقك بلون أحمر وتاريخ بتوقيت الرياض، لكن المكتبات الثقيلة تبطئ المشروع. هنا يأتي Light-Weight Logger.
قبل أن تطبق، اعرف أين تقف بالضبط
لا تعتمد على الانطباع؛ اختر مؤشراً تراجعه
Light-Weight Logger هي مكتبة تسجيل (logging) خفيفة مفتوحة المصدر ظهرت مؤخراً على Hacker News، تدعم لغات C++ وJava وC#. تتيح لك تخصيص تنسيق السجلات بالكامل: الألوان، الطوابع الزمنية، أسماء المستويات، وغيرها. الفكرة الأساسية: بدلاً من استخدام مكتبات ثقيلة مثل Log4j أو NLog في مشروع صغير، يمكنك الاعتماد على هذه المكتبة لتقليل الاعتماديات وتحسين الأداء.
في هذا الدليل، سنشرح لك كيفية تركيب المكتبة (خطوات تقريبية لأن README غير واضح)، وكيفية تعريف التنسيق المخصص، مع أمثلة عملية تناسب المطور العربي في السعودية والخليج. سنذكر أيضاً الأخطاء الشائعة والبدائل المناسبة.
هي مكتبة تسجيل خفيفة تسمح لك بتحديد تنسيق السجلات بشكل كامل باستخدام سلسلة نصية واحدة (master_style). تدعم إضافة ألوان مختلفة لكل مستوى تسجيل (ERROR, WARNING, INFO, DEBUG) وتضمين الطابع الزمني واسم الملف ورقم السطر. الهدف: تقليل حجم المكتبة وزيادة المرونة مقارنة بالأدوات التقليدية.
تناسب: المطورين الذين يعملون على مشاريع صغيرة أو متوسطة بلغة C++ أو Java أو C#، ويريدون تحكم كامل في تنسيق السجلات دون تحميل المكتبات الثقيلة. أيضاً مناسبة للمشاريع التعليمية أو النماذج الأولية.
لا تناسب: المشاريع الإنتاجية الكبيرة التي تحتاج إلى ميزات متقدمة مثل التسجيل غير المتزامن، التصفية المعقدة، أو التكامل مع أنظمة المراقبة المركزية. أيضاً إذا كنت تحتاج إلى دعم لغات أخرى (Python, JavaScript) فهذه المكتبة لا تدعمها حالياً.
تنبيه: README الحالي غير واضح تماماً، لذا الخطوات التالية تقريبية بناءً على بنية المشروع. قد تحتاج إلى تعديلها حسب إصدار المكتبة.
git clone https://github.com/PenguineDavid/light-weight-logger.gitcd light-weight-logger/cpp).logger.h و logger.cpp) إلى مجلد مشروعك.master_style هو سلسلة نصية تحدد شكل السجل. العناصر الأساسية:
%N: اسم المستوى (مثل ERROR).%D: التاريخ.%T: الوقت.%Z: المنطقة الزمنية.%M: الرسالة الأساسية.%F: اسم الملف.%t: thread ID.%L: رقم السطر.%C: لون البداية (لون العنصر التالي).%c: إعادة تعيين اللون.%S: مسافة.%G: لون رمادي.مثال: master_style = "%C[%N]%c%S%G[%D %T %Z]%c %M %G(%F:%t:%L)";
ثم نضيف تنسيقاً لكل مستوى:
logger.add_format("ERROR", master_style, Colour::RED);
logger.add_format("INFO", master_style, Colour::BLUE);مثال بلغة C++:
#include "logger.h"
int main() {
Logger logger;
std::string master_style = "%C[%N]%c%S%G[%D %T %Z]%c %M %G(%F:%t:%L)";
logger.add_format("ERROR", master_style, Colour::RED);
logger.add_format("INFO", master_style, Colour::BLUE);
logger.log("ERROR", "فشل الاتصال بقاعدة البيانات");
logger.log("INFO", "تم بدء الخدمة بنجاح");
return 0;
}الخرج المتوقع (في الطرفية):
[ERROR] [2025-03-28 14:30:00 +03:00] فشل الاتصال بقاعدة البيانات (main.cpp:1:23)
[INFO] [2025-03-28 14:30:00 +03:00] تم بدء الخدمة بنجاح (main.cpp:1:24)مع الألوان: ERROR باللون الأحمر، INFO بالأزرق، الطابع الزمني بالرمادي.
الإيجابيات: خفيف، مرن، مفتوح المصدر، يدعم ثلاث لغات.
السلبيات: README غير واضح، لا يوجد توثيق كافٍ، غير مناسب للمشاريع الكبيرة، عدد النجوم 0 (مشروع جديد).
الخلاصة: إذا كنت تبحث عن مكتبة تسجيل خفيفة لمشروع صغير أو تعليمي، وتريد تحكماً كاملاً في التنسيق، فجربها. أما إذا كان مشروعك إنتاجياً، فاستخدم بدائل أكثر نضجاً.
حسب README، لا يدعم حالياً. لكن يمكنك المساهمة في إضافة دعم لغات أخرى.
استخدم الدالة add_format مع قيمة Colour المناسبة (مثل Colour::RED, Colour::BLUE).
لا، لأنها جديدة وغير مختبرة بشكل كافٍ. استخدمها في المشاريع الصغيرة أو التجريبية.
Light-Weight Logger أخف وزناً وأبسط، لكن Log4j يوفر ميزات أكثر (تصفية، إخراج متعدد، إلخ).
من المتوقع، لكن غير مؤكد. جربها على نظامك.
يمكنك فتح issue أو pull request على GitHub.
لا، هذا المقال هو أول دليل عربي.
غير محددة في README. افترض أنها مفتوحة المصدر.
Light-Weight Logger مشروع واعد لمطوري C++ وJava وC# الذين يريدون تحكماً دقيقاً في تنسيق السجلات دون تضخيم المشروع. جربه في مشروعك الصغير القادم، وساهم في تحسينه إذا أعجبك. تذكر أن تشارك تجربتك مع المجتمع العربي.
خطوات عملية مرتبة من التشخيص إلى النتيجة
لماذا؟ للحصول على الكود المصدري للمكتبة
كيف؟ git clone https://github.com/PenguineDavid/light-weight-logger.git
الناتج: مجلد light-weight-logger يحتوي على الكود
لماذا؟ لإتاحة استخدام المكتبة في الكود
كيف؟ انسخ logger.h و logger.cpp (أو الملفات المكافئة للغة) إلى مجلد مشروعك وأضفها إلى قائمة الترجمة (مثل CMake أو Makefile)
الناتج: الملفات مضمنة وجاهزة للترجمة
لماذا؟ لتخصيص شكل السجلات حسب احتياجك
كيف؟ أنشئ سلسلة master_style باستخدام العناصر المدعومة (%N, %D, %T, %Z, %M, %F, %t, %L, %C, %c, %S, %G) ثم استخدم add_format لكل مستوى مع اللون المطلوب
الناتج: تنسيق مخصص لكل مستوى تسجيل
لماذا؟ للتحقق من عمل المكتبة والتنسيق
كيف؟ استخدم logger.log("ERROR", "رسالة اختبار") وشاهد الخرج في الطرفية
الناتج: سجل ملون بالتنسيق المطلوب
حوّل القراءة إلى تنفيذ سريع
#include "logger.h"
int main() {
Logger logger;
std::string master_style = "%C[%N]%c%S%G[%D %T %Z]%c %M %G(%F:%t:%L)";
logger.add_format("ERROR", master_style, Colour::RED);
logger.add_format("INFO", master_style, Colour::BLUE);
logger.log("ERROR", "فشل الاتصال بقاعدة البيانات");
logger.log("INFO", "تم بدء الخدمة بنجاح");
return 0;
}اعرف أين يتعثر الناس وكيف تتجنب ذلك
ماذا تفعل حسب حالتك؟
إذا: إذا كان مشروعك صغيرًا أو تعليميًا وتريد تحكمًا كاملاً بالتنسيق
إذن: استخدم Light-Weight Logger
إذا: إذا كان مشروعك إنتاجيًا كبيرًا أو يحتاج ميزات متقدمة
إذن: استخدم بدائل مثل spdlog (C++) أو Log4j (Java) أو NLog (C#)
إذا: إذا كنت تحتاج دعم لغات أخرى
إذن: ابحث عن مكتبات أخرى تدعم Python/JavaScript
جدول صغير يمنع التسويف
نقاط مختصرة ترجع لها لاحقاً
1. مكتبة خفيفة مفتوحة المصدر تدعم C++ وJava وC#
2. تتيح تخصيص تنسيق السجلات بالكامل عبر master_style
3. تدعم ألوان مختلفة لكل مستوى تسجيل (ERROR, WARNING, INFO, DEBUG)
4. تضمين الطابع الزمني، اسم الملف، رقم السطر، thread ID
5. README غير واضح، الخطوات تقريبية
6. عدد النجوم 0 (مشروع جديد)
7. مناسبة للمشاريع الصغيرة والتعليمية، غير موصى بها للإنتاج
8. بدائل: spdlog (C++), Log4j (Java), NLog (C#)
إجابات مباشرة على ما يبحث عنه الزائر
تعريفات مختصرة تمنع الالتباس
سلسلة نصية تحدد تنسيق السجل بالكامل، تحتوي على عناصر مثل %N (اسم المستوى) و%D (التاريخ) و%M (الرسالة).
دالة لربط مستوى تسجيل معين (مثل ERROR) بتنسيق master_style ولون محدد.
فئة أو تعداد يحدد ألوان ANSI للسجلات (مثل RED, BLUE, GREY).
استخدمها كمسارات متابعة داخل نفس الموضوع
تحول القارئ: من مطور يعتمد على مكتبات تسجيل ثقيلة أو لا يستخدم تسجيلاً مخصصاً، إلى مطور قادر على تنفيذ نظام تسجيل خفيف ومرن يناسب مشروعه.
القيمة الحقيقية تظهر عند العودة والتطبيق
لا تتعامل معه كمقال يُقرأ مرة واحدة. استخدمه كلوحة تشغيل: ارجع للتشخيص عند ظهور المشكلة، وللقوالب عند التطبيق، ولمؤشرات القياس عند المراجعة.
Light-Weight Logger مشروع واعد لمطوري C++ وJava وC# الذين يريدون تحكماً دقيقاً في تنسيق السجلات دون تضخيم المشروع. جربه في مشروعك الصغير القادم، وساهم في تحسينه إذا أعجبك. تذكر أن تشارك تجربتك مع المجتمع العربي.
حتى يبقى المرجع صالحاً مع الوقت
FAQ