تسجيل الدخول في Go (Golang): أفضل المكتبات والحلول للإنتاج

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

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

ابدأ الدورة

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



تسجيل الدخول هو إحدى المهام الرئيسية عند تطوير أي تطبيق جاد بلغة Go. يسمح تسجيل الدخول المُعد بشكل صحيح بالعثور السريع على الأخطاء، وتحليل الأداء، وتتبع سلوك النظام في بيئة الإنتاج. في هذه المقالة، سنستعرض المكتبات الأكثر شيوعًا وحداثة لتسجيل الدخول في Go، ونقاط قوتها وضعفها، بالإضافة إلى تقديم أمثلة عملية للأكواد.



لماذا نحتاج إلى تسجيل الدخول في Go؟



على عكس الإخراج البسيط إلى وحدة التحكم، يتطلب تسجيل الدخول الصناعي ما يلي:

  • التنظيم — الإخراج بتنسيق JSON لسهولة التكامل مع أنظمة جمع السجلات (ELK، Grafana Loki، Datadog)؛
  • مستويات تسجيل الدخول — debug، info، warn، error، fatal؛
  • الأداء — تأثير ضئيل على سرعة تشغيل التطبيق؛
  • السياق — إضافة بيانات وصفية (معرف الطلب، اسم المستخدم، اسم الدالة).


المكتبة القياسية log لا تدعم الإخراج المنظم والمستويات، لذلك يستخدم مطورو Go بنشاط الحلول الخارجية.



1. log/slog — الحزمة القياسية لـ Go 1.21



بدءًا من الإصدار Go 1.21، تمت إضافة الحزمة log/slog إلى المكتبة القياسية. توفر تسجيل دخول منظم "مباشر من الصندوق" ولا تتطلب تثبيت تبعيات إضافية.



المزايا:

  • دعم رسمي من مطوري Go؛
  • إعداد مرن عبر Handler (JSON، نصي، مخصص)؛
  • مستويات مدمجة (Debug، Info، Warn، Error)؛
  • دعم السياق ومجموعات السمات.


مثال على الاستخدام:

package main

import ( "log/slog" "os")

func main() { // مسجل JSON logger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) logger.Info("تم تشغيل الخادم", "port", 8080, "env", "production")

// مسجل نصي بمستوى Debug textLogger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ Level: slog.LevelDebug, })) textLogger.Debug("تصحيح الاتصال", "ip", "192.168.1.1")}


إذا كنت تبدأ مشروعًا جديدًا على Go 1.21+، فإن slog هو الخيار الأفضل لمعظم المهام.



2. zerolog — أقصى أداء



مكتبة zerolog (github.com/rs/zerolog) معروفة بسرعتها الاستثنائية. تستخدم تخصيصات صفرية لتنسيق JSON، مما يجعلها واحدة من الأسرع في نظام Go البيئي.



الميزات:

  • الحد الأدنى من تخصيص الذاكرة (zero allocation)؛
  • مستويات تسجيل الدخول: trace، debug، info، warn، error، fatal، panic؛
  • سلسلة من الطرق لإضافة الحقول؛
  • دعم الإخراج الملون إلى وحدة التحكم.


مثال:

package main

import ( "github.com/rs/zerolog" "github.com/rs/zerolog/log")

func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix log.Info().Str("service", "api").Int("status", 200).Msg("تم معالجة الطلب")

// مستوى Error مع تتبع المكدس log.Error().Err(err).Str("method", "GET").Msg("خطأ في الطلب")}


متى تختار zerolog: عندما يكون الأداء أمرًا بالغ الأهمية (خدمات دقيقة عالية التحميل، واجهات برمجة تطبيقات بملايين الطلبات).



3. zap — قوي وسريع من Uber



مكتبة zap (go.uber.org/zap) هي رائدة أخرى في الأداء. تم تطويرها في Uber للاستخدام الداخلي، لكنها أصبحت المعيار الفعلي للعديد من مشاريع Go.



الإمكانيات الرئيسية:

  • وضعان: Logger (أبطأ، أكثر راحة

توصيات