أفضل مكتبات التسجيل (Logging) للغة Go (Golang): نظرة عامة ومقارنة

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

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

ابدأ الدورة

التسجيل للغة Go (Golang): أفضل الحلول والأدوات

التسجيل هو أحد المكونات الرئيسية لأي تطبيق إنتاجي بلغة Go. فهو يساعد في تتبع الأخطاء، وتحليل سلوك النظام، وإجراء التدقيق. يوجد في Go العديد من المكتبات للتسجيل، لكل منها ميزاتها الخاصة، وأداؤها، وسهولة استخدامها. في هذه المقالة، سنستعرض أفضل الحلول: بدءًا من الحزمة القياسية log وصولاً إلى عالية الأداء zap و zerolog، بالإضافة إلى المعيار الجديد slog.



1. الحزمة القياسية log

الحزمة المدمجة log هي أبسط طريقة لبدء التسجيل في Go. لا تتطلب تثبيت تبعيات خارجية وهي مناسبة للمشاريع الصغيرة أو النماذج الأولية السريعة.

الميزات:

  • واجهة برمجة تطبيقات بسيطة: Print, Printf, Println, Fatal, Panic.
  • دعم البادئات والأعلام (التاريخ، الوقت، الملف).
  • الإخراج الافتراضي إلى os.Stderr.
  • لا يدعم التسجيل المنظم (structured logging) بشكل افتراضي.
package main

import "log"

func main() { log.Println("هذه رسالة بسيطة") log.Printf("المستخدم %s قام بتسجيل الدخول", "admin") log.Fatal("خطأ جسيم - سينتهي التطبيق")}

متى تستخدم: للنصوص البرمجية، الأدوات المساعدة، الاختبارات، أو عندما لا تكون هناك حاجة لتنسيقات معقدة.



2. logrus — التسجيل المنظم

Logrus هي واحدة من أشهر المكتبات للغة Go. توفر تسجيلاً منظماً مع دعم المستويات، الحقول، والتنسيق (JSON، نص).

الميزات:

  • المستويات: Trace, Debug, Info, Warn, Error, Fatal, Panic.
  • دعم الخطافات (hooks) لإرسال السجلات إلى خدمات خارجية.
  • تنسيق مرن: TextFormatter, JSONFormatter.
  • إمكانية إضافة حقول سياقية.
package main

import ( "github.com/sirupsen/logrus")

func main() { log := logrus.New() log.SetFormatter(&logrus.JSONFormatter{}) log.WithFields(logrus.Fields{ "user": "admin", "ip": "192.168.1.1", }).Info("تم توثيق المستخدم")}

العيب: أداء أقل مقارنة بالمكتبات الأحدث (zap, zerolog).



3. zap — تسجيل فائق السرعة من Uber

Zap من Uber هي مكتبة تركز على أقصى أداء. تستخدم الانعكاس (reflection) فقط عند الضرورة وتقدم وضعين: SugaredLogger (مريح، أبطأ) و Logger (سريع، يتطلب كتابة صارمة للأنواع).

الميزات:

  • سرعة عالية جداً: تصل إلى 10 أضعاف سرعة logrus.
  • دعم التسجيل المنظم مع الحقول.
  • إعدادات مرنة: مستويات، إخراج إلى ملف/وحدة تحكم، تدوير.
  • آمن: لا يخصص ذاكرة في المسار الساخن.
package main

import ( "go.uber.org/zap")

func main() { logger, _ := zap.NewProduction() defer logger.Sync()

logger.Info("تم تشغيل الخادم", zap.String("port", "8080"), zap.Int("workers", 10), )}

متى تستخدم: الخدمات المصغرة عالية التحميل، أنظمة الوقت الفعلي.



4. zerolog — البساطة والأداء

Zerolog هي مكتبة أخرى عالية الأداء تركز على عدم التخصيص (zero allocations) والبساطة. تأتي مع وثائق ممتازة ودعم مدمج لـ JSON بشكل افتراضي.

الميزات:

  • أقل تخصيص للذاكرة.
  • دعم المستويات، الحقول، السجلات الفرعية.
  • طباعة جميلة (pretty-printing) مدمجة للتطوير.
  • ب

توصيات