#PerformanceTuning
کتابخانه های مختلفی برای لاگ کردن خطا ها در دات نت وجود داره، از جمله Elmah، NLog, Log4net و ...
کتابخانه Elmah بهترین انتخاب برای پروژه های کوچک و متوسطه، کار باهاش راحته و پنل ساده ای هم داره، ولی توی پروژه های بزرگ که تعداد لاگ ها خیلی زیاد میشه، دیگه Elmah جوابگو نیست، هم به خاطر سرعت کمش نسبت به بقیه کتابخانه ها و هم به خاطر پنل ضعیف اش که حتی یه سرچ هم نداره
در این شرایط راه های مختلفی هست مثل استفاده از سرویس های نگهداری لاگ Cloud-based مثل setrny.io , elmah.io و ...
راه حل بعدی استفاده از برنامه های مدیریت لاگ مثل Seq هستند که بر خلاف مورد قبلی، یک سرویس خارجی نیست و روی سرور خودتون لاگ ها رو نگهداری میکنه و داشبورد قدرتمندی برای سرچ و کوئری گرفتن در اختیارتون میذاره (ولی پولیه)
🔰 راه حل حرفه ای تر و البته رایگان، استفاده از Serilog و ElasticSearch و Kibana هست
🔸دیتابیس ElasticSearch در واقع یک دیتابیس NoSql و یک Search Engine (موتور جستجو) سورس باز و فوق سریع (بر پایه Lucene) هست که قابلیت جستجو و کوئری زدن زدن (به صورت full text search) با سرعت و قدرت بالا رو داره از اون برای نگهداری لاگ ها استفاده خواهیم کرد
🔹پنل Kibana هم یه پلاگین داشبور سورس باز و قدرتمند با امکانات زیاد برای نمایش اطلاعات دیتابیس Elastic هست و از اون برای نمایش خطا ها و جستجو کردن و نمودار گرفتن استفاده می کنیم
🔸 کتابخانه Serilog هم میشه گفت بهترین کتابخانه Logging هست. نسبت به NLog جدید تره و طراحی مدرن تری داره و میزان رشد محبوبیتش هم بیشتره؛ پس میشه گفت از NLog هم بهتره (البته خیلی اختلاف ندارند)
این کتابخونه قابلیت های زیادی داره که به لطف پلاگین های زیادی که برای Serilog وجود داره (اصطلاحا بهش میگن Sinks) براش فراهم شده و از لحاظ پرفرمنسی هم از NLog سریع تره.
🔹 تنها نکته مهم، استفاده از روش Structred Logging نسبت به حالت معمولی است. شاید فکر کنید دو دستور زیر هیچ تفاوتی نمیکنه!
logger.Debug("UserName is : Ali");
logger.Debug("UserName is : {username}", "Ali");
ولی عملکرد این دو یکسان نبوده و خط دوم که به صورت Structred هست اطلاعات را به صورت جداگانه ضبط و ثبت میکنه درنتیجه در کنار متن خطا، یک فیلد به نام username با مقدار Ali نیز ذخیره میکنه که کار جستجو و کوئری زدن رو راحت تر میکنهمقالات آموزش این سلوشن :
https://bit.ly/2EAjpTh
https://bit.ly/2EBUYFc
https://bit.ly/2X7g1Xn
https://bit.ly/2Exvs3C
مخزن نمونه کد :
https://github.com/thecarlo/elastic-kibana-netcore-serilog
_____________