عن المشروع

Logrus هو مسجّل منظم للغة Go، مصمم ليكون متوافقاً برمجياً مع مسجّل المكتبة القياسية. وهو في وضع الصيانة: يركّز المشروع على الأمان وإصلاح الأخطاء وتحسين الأداء، مع حصر الميزات الجديدة في أعمال التشغيل البيني مثل log/slog في Go. يشير ملف README إلى أن التسجيل المنظم أصبح متاحاً على نطاق واسع في Go عبر بدائل مثل Zerolog وZap وApex. القدرات الأساسية: - تسجيل متعدد المستويات بسبعة مستويات: Trace وDebug وInfo وWarning وError وFatal وPanic. يمكن تهيئة المسجّل لإصدار الإدخالات عند مستوى خطورة محدد أو أعلى منه فقط. - حقول منظمة عبر WithField وWithFields، مما يشجع على تسجيل أزواج المفتاح والقيمة القابلة للاكتشاف بدلاً من الرسائل المنسقة الطويلة. تتضمن الإدخالات تلقائياً time وmsg وlevel. - الحقول الافتراضية: يعيد WithFields كائن logrus.Entry يمكن إعادة استخدامه لإرفاق حقول شائعة مثل request_id أو user_ip عبر عبارات تسجيل متعددة. - المنسّقات: TextFormatter المدمج (مرمّز بالألوان عندما يكون الإخراج طرفية TTY، وإلا نص عادي متوافق مع logfmt) وJSONFormatter للتحليل الآلي بواسطة أدوات مثل Logstash أو Splunk. تشمل الخيارات ForceColors وDisableColors وDisableLevelTruncation وPadLevelText وFullTimestamp. تطبق المنسّقات المخصصة واجهة Formatter. - الخطافات: إرفاق سلوك بمستويات التسجيل، على سبيل المثال إرسال الأخطاء إلى متتبعات الاستثناءات، أو التمرير إلى StatsD، أو الكتابة إلى syslog. توجد خطافات مدمجة وتُدرج خطافات الطرف الثالث في ويكي المشروع. - الإبلاغ عن المستدعي: يضيف SetReportCaller(true) الطريقة المستدعية كحقل، مع الإشارة إلى عبء قابل للقياس في ملف README. - تكامل io.Writer: يعرّض logger.Writer() المسجّل كـ io.Writer، مما يسمح بإعادة توجيه إخراج سجل المكتبة القياسية عبر منسّقات وخطافات Logrus. - دعم الاختبار: توفر حزمة خطاف الاختبار مساعدات NewLocal وNewGlobal وNewNullLogger لتأكيد رسائل السجل في الاختبارات. - معالجات Fatal: يسجّل RegisterExitHandler دوال تُنفّذ قبل os.Exit(1) عند رسائل مستوى fatal، وهو مفيد للإغلاق السلس. - أمان الخيوط: المسجّل محمي بقفل mutex افتراضياً؛ يمكن لـ SetNoLock() تعطيل القفل عندما تكون الخطافات والإخراج آمنة للخيوط بالفعل. لا يتم تضمين تدوير السجلات عمداً؛ يوصي ملف README بأدوات خارجية مثل logrotate. لا تمتلك المكتبة مفهوماً مدمجاً للبيئة، لذا يُترك اختيار المنسّق والخطاف حسب البيئة للتطبيق.