معالجات slog
معالجات نصية وJSON
معالجات slog درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
المعالجات تحدد التنسيق
في slog، يستدعي المسجّل المعالج لتنسيق كل سجل وكتابته. ويؤدي تبديل المعالج إلى تغيير تنسيق الناتج من دون تعديل استدعاءات التسجيل.
TextHandler
يكتب slog.NewTextHandler أسطرًا سهلة القراءة للبشر بتنسيق key=value. وهو مناسب للتطوير المحلي والطرفيات.
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewTextHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "dev")
}JSONHandler
يُخرج slog.NewJSONHandler كائن JSON واحدًا في كل سطر. وهو مثالي لمسارات سجلات الإنتاج.
package main
import (
"log/slog"
"os"
)
func main() {
h := slog.NewJSONHandler(os.Stdout, nil)
logger := slog.New(h)
logger.Info("hello", "env", "prod")
}إنشاء مسجّل
تغلّف slog.New(handler) معالجًا داخل مسجّل. وتستدعي logger.Info وlogger.Error وغيرهما على تلك النسخة.
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))HandlerOptions
الوسيط الثاني لمنشئ المعالج هو *slog.HandlerOptions. مرّر nil لاستخدام الإعدادات الافتراضية، أو اضبط المستوى وموقع المصدر.
opts := &slog.HandlerOptions{
Level: slog.LevelDebug,
AddSource: true,
}
h := slog.NewJSONHandler(os.Stdout, opts)الكتابة إلى ملف أو مخزن مؤقت
تقبل المعالجات أي io.Writer. ويمكنك التسجيل في ملف أو مخزن مؤقت للاختبارات أو في stdout. ويُعد هذا الفصل من نقاط التصميم الأساسية في slog.
f, _ := os.Create("app.log")
logger := slog.New(slog.NewJSONHandler(f, nil))ضبط المسجّل الافتراضي
يجعل slog.SetDefault(logger) دوال الحزمة (slog.Info وغيرها) تستخدم معالجك. اضبطه مرة واحدة عند بدء التشغيل.
slog.SetDefault(slog.New(slog.NewJSONHandler(os.Stdout, nil)))
slog.Info("now JSON by default")ناتج النص مقابل JSON
الاستدعاء نفسه بتنسيقين:
- النص:
time=... level=INFO msg=hello env=dev - JSON:
{"time":"...","level":"INFO","msg":"hello","env":"dev"}
اختيار معالج
قاعدة عامة:
- محلي/تطوير: TextHandler (سهل القراءة)
- إنتاج/تجميع: JSONHandler (سهل التحليل)
اتخذ القرار عبر متغير بيئي حتى تتكيف النسخة الثنائية نفسها.
كتابة إعداد قابل لإعادة الاستخدام
اجعل إنشاء المسجّل مركزيًا حتى يشارك التطبيق بأكمله إعدادًا واحدًا.
func newLogger(prod bool) *slog.Logger {
if prod {
return slog.New(slog.NewJSONHandler(os.Stdout, nil))
}
return slog.New(slog.NewTextHandler(os.Stdout, nil))
}قابل للتشغيل: تبديل المعالجات
يسجّل هذا البرنامج الحدث نفسه عبر كلا المعالجين، بحيث يمكنك مقارنة التنسيقات.
package main
import (
"log/slog"
"os"
)
func main() {
text := slog.New(slog.NewTextHandler(os.Stdout, nil))
js := slog.New(slog.NewJSONHandler(os.Stdout, nil))
text.Info("login", "user", "ada")
js.Info("login", "user", "ada")
}تحقق سريع
اختبر مدى فهمك لمعالجات slog.
مراجعة
لقد تعلمت معالجات slog:
- تنسّق المعالجات السجلات وتكتبها، ويستدعيها المسجّل
- استخدم
NewTextHandlerللبشر وNewJSONHandlerللآلات - تقبل المعالجات أي
io.Writerو*HandlerOptions - تربط
slog.SetDefaultدوال الحزمة بالمعالج
الأسئلة الشائعة
هل درس «معالجات slog» مجاني؟
نعم — نص درس «معالجات slog» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «معالجات slog»؟
معالجات نصية وJSON تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «معالجات slog»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.