تسجيل سريع ومنظم ومستوي في Go.
go get -u go.uber.org/zap
لاحظ أن Zap يدعم فقط أحدث إصدارين ثانويين من Go.
في السياقات التي يكون فيها الأداء جيدًا، ولكن ليس بالغ الأهمية، استخدم SugaredLogger
. إنها أسرع بمقدار 4 إلى 10 مرات من حزم التسجيل المنظمة الأخرى وتتضمن واجهات برمجة التطبيقات المنظمة والنمط printf
.
logger , _ := zap . NewProduction ()
defer logger . Sync () // flushes buffer, if any
sugar := logger . Sugar ()
sugar . Infow ( "failed to fetch URL" ,
// Structured context as loosely typed key-value pairs.
"url" , url ,
"attempt" , 3 ,
"backoff" , time . Second ,
)
sugar . Infof ( "Failed to fetch URL: %s" , url )
عندما يكون الأداء وسلامة الكتابة أمرًا بالغ الأهمية، استخدم Logger
. إنه أسرع حتى من SugaredLogger
ويخصص أقل بكثير، لكنه يدعم فقط التسجيل المنظم.
logger , _ := zap . NewProduction ()
defer logger . Sync ()
logger . Info ( "failed to fetch URL" ,
// Structured context as strongly typed Field values.
zap . String ( "url" , url ),
zap . Int ( "attempt" , 3 ),
zap . Duration ( "backoff" , time . Second ),
)
راجع الوثائق والأسئلة الشائعة لمزيد من التفاصيل.
بالنسبة للتطبيقات التي تقوم بتسجيل الدخول إلى المسار السريع، فإن التسلسل القائم على الانعكاس وتنسيق السلسلة باهظ الثمن للغاية - فهي تستهلك الكثير من وحدة المعالجة المركزية (CPU) وتقوم بالعديد من التخصيصات الصغيرة. وبعبارة أخرى، فإن استخدام encoding/json
و fmt.Fprintf
لتسجيل الكثير من interface{}
يجعل تطبيقك بطيئًا.
يأخذ Zap نهجا مختلفا. وهو يشتمل على برنامج تشفير JSON خالٍ من الانعكاس وغير مخصص للتخصيص، ويسعى Logger
الأساسي جاهداً لتجنب الحمل الزائد للتسلسل والتخصيصات حيثما كان ذلك ممكنًا. من خلال بناء SugaredLogger
عالي المستوى على هذا الأساس، يتيح Zap للمستخدمين اختيار الوقت الذي يحتاجون فيه إلى حساب كل تخصيص ومتى يفضلون واجهة برمجة التطبيقات (API) المألوفة والمكتوبة بشكل فضفاض.
كما تم قياسه من خلال مجموعة قياس الأداء الخاصة به، فهو ليس فقط أكثر أداءً من حزم التسجيل المنظمة المماثلة - بل إنه أيضًا أسرع من المكتبة القياسية. كما هو الحال مع جميع المعايير، يجب التعامل معها بحذر. 1
تسجيل رسالة و10 حقول:
طَرد | وقت | الوقت % للانطلاق | الكائنات المخصصة |
---|---|---|---|
⚡ انطلق | 656 نانو ثانية / المرجع | +0% | 5 مخصصات/المرجع |
⚡ زاب (مسكرة) | 935 نانو ثانية / المرجع | +43% | 10 مخصصات/المرجع |
com.zerolog | 380 نانو ثانية / المرجع | -42% | 1 مخصصات/المرجع |
مجموعة الذهاب | 2249 نانو ثانية / المرجع | +243% | 57 تخصيصًا/مرجعًا |
سجل (LogAttrs) | 2479 نانو ثانية / المرجع | +278% | 40 تخصيصًا/مرجعًا |
جهد | 2481 نانو ثانية / المرجع | +278% | 42 تخصيصًا/مرجعًا |
قمة/سجل | 9591 نانو ثانية / المرجع | +1362% | 63 تخصيصًا/مرجعًا |
سجل15 | 11393 نانو ثانية / المرجع | +1637% | 75 تخصيصًا/مرجعًا |
logrus | 11654 نانو ثانية / المرجع | +1677% | 79 تخصيصًا/مرجعًا |
قم بتسجيل رسالة باستخدام مسجل يحتوي بالفعل على 10 حقول للسياق:
طَرد | وقت | الوقت % للانطلاق | الكائنات المخصصة |
---|---|---|---|
⚡ انطلق | 67 نانو ثانية / المرجع | +0% | 0 تخصيص/المرجع |
⚡ زاب (مسكرة) | 84 نانو ثانية / المرجع | +25% | 1 مخصصات/المرجع |
com.zerolog | 35 نانو ثانية / المرجع | -48% | 0 تخصيص/المرجع |
جهد | 193 نانو ثانية / المرجع | +188% | 0 تخصيص/المرجع |
سجل (LogAttrs) | 200 نانو ثانية / المرجع | +199% | 0 تخصيص/المرجع |
مجموعة الذهاب | 2460 نانو ثانية / المرجع | +3572% | 56 تخصيصًا/مرجعًا |
سجل15 | 9038 نانو ثانية / المرجع | +13390% | 70 تخصيصًا/مرجعًا |
قمة/سجل | 9068 نانو ثانية / المرجع | +13434% | 53 تخصيصًا/مرجعًا |
logrus | 10521 نانو ثانية / المرجع | +15603% | 68 تخصيصًا/مرجعًا |
قم بتسجيل سلسلة ثابتة، بدون أي سياق أو قالب نمط printf
:
طَرد | وقت | الوقت % للانطلاق | الكائنات المخصصة |
---|---|---|---|
⚡ انطلق | 63 نانو ثانية / المرجع | +0% | 0 تخصيص/المرجع |
⚡ زاب (مسكرة) | 81 نانو ثانية / المرجع | +29% | 1 مخصصات/المرجع |
com.zerolog | 32 نانو ثانية / المرجع | -49% | 0 تخصيص/المرجع |
مكتبة قياسية | 124 نانو ثانية / المرجع | +97% | 1 مخصصات/المرجع |
جهد | 196 نانو ثانية / المرجع | +211% | 0 تخصيص/المرجع |
سجل (LogAttrs) | 200 نانو ثانية / المرجع | +217% | 0 تخصيص/المرجع |
مجموعة الذهاب | 213 نانو ثانية / المرجع | +238% | 9 مخصصات/المرجع |
قمة/سجل | 771 نانو ثانية / المرجع | +1124% | 5 مخصصات/المرجع |
logrus | 1439 نانو ثانية / المرجع | +2184% | 23 تخصيصًا/مرجعًا |
سجل15 | 2069 نانو ثانية / المرجع | +3184% | 20 تخصيصًا/مرجعًا |
تم الانتهاء من جميع واجهات برمجة التطبيقات، ولن يتم إجراء أي تغييرات جذرية في سلسلة الإصدارات 1.x. يجب على مستخدمي أنظمة إدارة التبعية المدركة semver تثبيت zap على ^1
.
نحن نشجع وندعم مجتمعًا نشطًا وصحيًا من المساهمين - بما فيهم أنت! التفاصيل موجودة في دليل المساهمة ومدونة قواعد السلوك. يراقب مشرفو zap المشكلات ويسحبون الطلبات، ولكن يمكنك أيضًا الإبلاغ عن أي سلوك سلبي إلى [email protected]. قائمة البريد الإلكتروني هذه عبارة عن مساحة خاصة وآمنة؛ حتى المشرفين على zap لا يمكنهم الوصول، لذا لا تتردد في جعلنا على مستوى عالٍ.
تم إصداره بموجب ترخيص MIT.
1 على وجه الخصوص، ضع في اعتبارك أننا قد نقوم بإجراء مقارنة مع الإصدارات الأقدم قليلاً من الحزم الأخرى. يتم تثبيت الإصدارات في ملف المعايير/go.mod. ↩