تشتمل أفضل ممارسات التسجيل على ما يلي:
لا تستخدم تنسيق السلسلة أو الاستيفاء. لا يفيد تسجيل سلسلة باستخدام
$"This broke {brokenThing}"
في تصحيح الأخطاء.قم بتمرير العناصر بحيث تصبح حقولاً قابلة للبحث.
بدلاً من
LogInformation(LogEventIds.StartProcessing, $"Processing has started on item {Item.itemNumber}");
، استخدم:- عنصر بهذه الصفة، مثل
LogInformationObject(LogEventIds.StartProcessing, Item);
، أو - عناصر مجهولة، مثل
LogInformationObject(LogEventIds.StartProcessing, new {Item.itemNumber, Item.itemDescription, someData});
.
- عنصر بهذه الصفة، مثل
اتبع اصطلاحات ترقيم EventId الموضحة في LogEventIds.
لأي مجموعة مهمة من الأعمال، استخدم نمط التسجيل التالي:
- استخدم
LogInformationObject
عند الإدخال، على سبيل المثال عندما توشك على بدء مهمة الترميز. - استخدم
LogInformationObject
للنجاح، على سبيل المثال عندما تنجح مهمة الترميز. - استخدم
LogWarningObject
أوLogErrorObject
أوLogCriticalObject
عند الإخفاق، على سبيل المثال إذا فشلت مهمة الترميز. استخدم متغيرات أسلوب الاستثناء إذا أمكن.
- استخدم
على الرغم من أنه يمكنك تسجيل أي معلومات في أي مرحلة، فلا تلوث السجلات بضوضاء غريبة.
ObjectLogger
ObjectLogger مع IObjectLogger هي أداة غلاف صغيرة لبرنامج Logger / ILogger القياسي. تسجل هذه الأداة المساعدة أحادية الخط أي عنصر C# عن طريق تحويل عناصر C# إلى عناصر القاموس التي يمكن أن يستهلكها المسجل.
يقيد ObjectLogger / IObjectLogger استخدام طرق المسجل التي لا تحتوي على EventIds
باستخدام نمط محول، بدلاً من الوراثة. يفرض هذا التقييد على المطورين استخدام EventIds
، والتي تعتبر مفيدة لتصحيح الأخطاء.
تتضمن التوصيات الأخرى لاستخدام برنامج ObjectLogger ما يلي:
- لا تتجاوز IObjectLogger باستخدام ILogger.
- استخدم IObjectLogger مع النوع المناسب للفئة الخاصة بك:
IObjectLogger<myClass>
. - في أي استثناء لمعالجة منع التوقف المؤقت (catch)، استخدم أساليب IObjectLogger التي تتضمن استثناءات. يمكن لموفري التسجيل مثل Application Insights استخدام معلومات الاستثناء.
مخطط التسجيل والبيانات
توفر البنية الأساسية لوقت تشغيل Event Grid مخططاً أساسياً. يتضمن مخطط حدث Event Grid وقت الحدث والجهاز الأصلي ومستوى الخطورة ورسالة السلسلة. تتضمن الخصائص المخصصة الافتراضية Logger/ILoggerEventId
و Category
وRequestPath
.
كائنات السياق
للعمل مع واجهات برمجة التطبيقات (APIs) ومهام سير العمل المعقدة التي تتطلب العديد من المدخلات والمخرجات، يمكنك إنشاء عنصر سياق، وهو عبارة عن حقيبة خصائص من المتغيرات المهمة التي يمكن للتعليمة البرمجية الخاصة بك تمريرها أو إنشاؤها. يمكن أن تتعامل عناصر السياق مع العديد من المعلمات، ولا تحتاج توقيعات الطريقة إلى التغيير عند إضافة أو إزالة المعلمات. يمكنك أيضاً تمرير عناصر السياق إلى المسجل والواجهات الأخرى كوحدة.
على سبيل المثال، بدلًا من:
var store = new StorageBlob();
var tier = req.Query["tier"];
var result = await store.SetBlobStorageTier(blobName, tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, result);
يمكنك ترميز:
var storageContext = new StorageContext();
storageContext.Store = new StorageBlob();
storageContext.Tier = req.Query["tier"];
storageContext.Result = await store.SetBlobStorageTier(blobName, storageContext.Tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, storageContext);
مستويات السجل
قد لا يكون تعيين مستوى التسجيل المناسب أمراً سهلاً. الأوصاف العامة التالية لمستويات السجل مأخوذة من LogLevel Enum.
LogLevel | تعداد | الوصف |
---|---|---|
LogTrace | 0 | يحتوي على أكثر الرسائل تفصيلاً وقد يحتوي على بيانات تطبيق حساسة. يتم إيقاف تشغيل هذه الرسائل افتراضياً ولا يجب تشغيلها في بيئة التشغيل. |
LogDebug | 1 | تستخدم للتحقيق التفاعلي أثناء التطوير. تحتوي هذه السجلات بشكل أساسي على معلومات مفيدة لتصحيح الأخطاء وليست لها قيمة طويلة المدى. |
LogInformation | 2 | يتتبع التدفق العام للتطبيق. يجب أن تكون لهذه السجلات قيمة طويلة الأجل. |
LogWarning | 3 | يبرز حدثاً غير طبيعي أو غير متوقع في تدفق التطبيق، لكنه لا يوقف تنفيذ التطبيق. |
LogError | 4 | يسجل وقت توقف التدفق الحالي للتنفيذ بسبب فشل. يجب أن تشير هذه السجلات إلى الإخفاقات في النشاط الحالي، وليس الفشل على مستوى التطبيق. |
LogCritical | 5 | يصف تطبيقاً غير قابل للاسترداد أو تعطل في النظام، أو فشل ذريع يتطلب اهتماماً فورياً. |
LogNone | 6 | لا تستخدم لكتابة رسائل السجل. تحديد أنه يجب ألا تكتب فئة التسجيل أي رسائل. |
الخطوات التالية
وثائق المنتج:
وحدات Microsoft Learn: