المعالجات المخصّصة
أنشئ مخرجات السجل الخاصة بك
المعالجات المخصّصة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
متى لا تكفي المعالجات المدمجة
تلبي معالجا النص وJSON معظم الاحتياجات، لكنك قد تحتاج أحيانًا إلى ناتج مخصص: طرفيات ملوّنة، أو إرسال إلى نظام مقاييس، أو تنقيح الأسرار. عندها تنشئ معالجًا مخصصًا.
واجهة المعالج
ينفّذ المعالج أربع طرق:
Enabled(ctx, level) boolHandle(ctx, record) errorWithAttrs(attrs) HandlerWithGroup(name) Handler
type Handler interface {
Enabled(context.Context, slog.Level) bool
Handle(context.Context, slog.Record) error
WithAttrs(attrs []slog.Attr) slog.Handler
WithGroup(name string) slog.Handler
}Enabled تتحكم في التصفية
يُستدعى Enabled قبل إنشاء السجل. ويتيح إرجاع false لـ slog تجاوز العمل بالكامل، لذا استخدمها للتحقق من المستوى.
func (h *MyHandler) Enabled(_ context.Context, l slog.Level) bool {
return l >= slog.LevelInfo
}Handle تنفذ العمل
تتلقى Handle قيمة slog.Record التي تحتوي على الوقت والمستوى والرسالة والسمات. نسّقها واكتبها بالطريقة التي تناسبك.
func (h *MyHandler) Handle(_ context.Context, r slog.Record) error {
fmt.Printf("[%s] %s\n", r.Level, r.Message)
return nil
}التكرار على السمات
يعرض السجل سماته عبر r.Attrs، التي تستدعي دالتك لكل سمة.
r.Attrs(func(a slog.Attr) bool {
fmt.Printf(" %s=%v\n", a.Key, a.Value)
return true // keep going
})WithAttrs وWithGroup
تعيدان نسخة من معالجك تحمل سمات مُعدّة مسبقًا أو بادئة مجموعة. وهما تدعمان logger.With وslog.Group. ويمكن لمعالج بسيط تخزين هذه السمات وإعادة تمريرها، أو إرجاع نفسه لأغراض التعلم.
التغليف بدلًا من البناء
غالبًا لا تحتاج إلى معالج كامل؛ بل غلّف معالجًا موجودًا وتجاوز السلوك المطلوب فقط، مثل إضافة سمة ثابتة أو تنقيح مفاتيح.
type RedactHandler struct{ slog.Handler }
func (h RedactHandler) Handle(ctx context.Context, r slog.Record) error {
// mutate r here, then delegate
return h.Handler.Handle(ctx, r)
}حالة استخدام: التنقيح
يمكن لمعالج التنقيح البحث في السمات عن مفاتيح حساسة مثل password أو token واستبدال القيمة قبل تفويض المعالجة إلى معالج JSON.
حالة استخدام: التوجيه
يمكن لمعالج مخصص التوجيه حسب المستوى: إذ يرسل سجلات Error إلى stderr وإلى خطاف ويب للتنبيه، بينما يرسل Info إلى stdout. وبذلك يبقى منطق التوجيه خارج كل موضع استدعاء.
ملاحظات حول الأداء
قد تُنفَّذ Handle في مسارات ساخنة. تجنب عمليات التخصيص، ونفّذ فحوصات المستوى في Enabled، وأعد استخدام المخازن المؤقتة. ولهذا السبب تستخدم المعالجات القياسية مخزنًا مؤقتًا مجمّعًا داخليًا.
قابل للتشغيل: معالج مخصص بسيط
يعرّف هذا البرنامج المستقل معالجًا صغيرًا يطبع المستوى والرسالة والسمات، ثم يسجّل من خلاله.
package main
import (
"context"
"fmt"
"log/slog"
)
type Mini struct{}
func (Mini) Enabled(context.Context, slog.Level) bool { return true }
func (Mini) WithAttrs(a []slog.Attr) slog.Handler { return Mini{} }
func (Mini) WithGroup(string) slog.Handler { return Mini{} }
func (Mini) Handle(_ context.Context, r slog.Record) error {
fmt.Printf("%s: %s", r.Level, r.Message)
r.Attrs(func(a slog.Attr) bool {
fmt.Printf(" %s=%v", a.Key, a.Value)
return true
})
fmt.Println()
return nil
}
func main() {
l := slog.New(Mini{})
l.Info("hello", "user", "ada", "id", 7)
}تحقق سريع
اختبر مدى فهمك للمعالجات المخصصة.
مراجعة
لقد تعلمت إنشاء معالجات مخصصة:
- نفّذ
EnabledوHandleوWithAttrsوWithGroup - نفّذ فحوصات المستوى في
Enabledلتحسين الأداء - كرّر على السمات باستخدام
r.Attrs - غالبًا يكون تغليف معالج موجود أسهل من بنائه من الصفر
الأسئلة الشائعة
هل درس «المعالجات المخصّصة» مجاني؟
نعم — نص درس «المعالجات المخصّصة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «المعالجات المخصّصة»؟
أنشئ مخرجات السجل الخاصة بك تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «المعالجات المخصّصة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- لماذا السجلات المنظّمة
- معالجات slog
- مستويات السجل والسمات
- المعالجات المخصّصة