تسجيل الدخول في تطبيقات Go: أفضل الممارسات والأدوات

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

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

ابدأ الدورة

تسجيل الدخول في تطبيقات Go: أفضل الممارسات



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



لماذا حزمة log القياسية ليست دائمًا الخيار الأفضل؟



الحزمة المدمجة log في Go بسيطة ومريحة للمهام الأساسية. ومع ذلك، بالنسبة لتطبيقات الإنتاج، فإن لها عدة قيود:



  • عدم وجود مستويات تسجيل (debug, info, warn, error).
  • لا دعم للبيانات المنظمة (JSON, key-value).
  • صعوبات في تكوين الإخراج (على سبيل المثال، إلى عدة ملفات أو إلى نظام تجميع السجلات).
  • مشاكل محتملة في الأداء تحت الأحمال العالية.


للمشاريع الجادة، يُوصى باستخدام إحدى المكتبات المتخصصة.



أفضل المكتبات لتسجيل الدخول في Go



في سوق نظام Go البيئي، هناك العديد من المكتبات المعروفة. سننظر في ثلاثة من أشهرها:



1. Logrus

واحدة من أولى المكتبات التي أدخلت التسجيل المنظم في Go. تدعم Logrus المستويات، والتنسيق (JSON, Text)، والخطافات للتكامل مع الخدمات الخارجية (مثل Sentry).



package main

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

func main() { log := logrus.New() log.SetFormatter(&logrus.JSONFormatter{}) log.SetLevel(logrus.DebugLevel)

log.WithFields(logrus.Fields{ "user_id": 123, "action": "login", }).Info("المستخدم قام بتسجيل الدخول إلى النظام")}


2. Zap (Uber)

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



package main

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

func main() { logger, _ := zap.NewProduction() defer logger.Sync() // يمسح المخزن المؤقت، إن وجد

logger.Info("تمت معالجة الطلب", zap.String("path", "/api/v1/users"), zap.Int("status", 200), zap.Duration("duration", 0.5), )}


3. Zerolog

Zerolog هي مكتبة أخرى تركز على الأداء وتقليل تخصيص الذاكرة. توفر واجهة fluent API ودعمًا ممتازًا لسجلات JSON "خارج الصندوق".



package main

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

func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix

log.Debug(). Int("user_id", 456). Str("role", "admin"). Msg("تم استلام طلب الحذف")}


أفضل ممارسات تسجيل الدخول في Go



بغض النظر عن المكتبة المختارة، يجدر اتباع القواعد التالية:



1. استخدم السجلات المنظمة (JSON)

من الصعب تحليل السجلات النصية وتحليلها. يتيح تنسيق JSON التكامل بسهولة مع أنظمة تجميع السجلات (ELK, Loki, Datadog) وإجراء استعلامات معقدة.



// سيءlog.Printf("User %d logged in", userID)

// جيد (مع Zap)logger.Info("user logged in", zap.Int("user_id", userID))


2. اختر مستوى التسجيل بشكل صحيح