سپیده دلیرپور
سپیده دلیرپور
خواندن ۳ دقیقه·۱ سال پیش

Structure Logging with Serilog

Serilog

تعریف

فریم ورک open source هست که در دات نت برای عملیات logging استفاده می شود ، یک فریم ورک منعطف و موثر که لاگ ها رو می گیرد و آن ها را در فرمت های مختلف در دیتابیس ، فایل یا سرویس های خارجی به صورت ساختار یافته و حالت (key-value) ذخیره می کند و نسبت به فریم ورک هایی که به این منظور استفاده می شود جدیدتر است و نیاز به config خاصی برای نمایش ندارد.

مانند بسیاری از کتابخانه های دیگر برای دات نت، Serilog امکان ثبت لاگ درون فایل، محیط کنسول، دیتابیس و جاهای دیگر با فرمت Json را فراهم می کند. راه اندازی Serilog بسیار آسان است و قابل استفاده در اکثر پلتفرم های دات نت می باشد.

ویژگی های اصلی

استفاده از logging api برای پشتیبانی از6 سطح مختلف لاگ

  • Fatal : مربوط به خطاهایی است که برنامه را shutdown می کند (Forcing Shutdown)
  • Error: مربوط به مشکلات جدی است که در طول اجرای برنامه اتفاق می افتد (during Execution)
  • Warning : مربوط به گزارش مواردی که critical نیستند.(non-critical)
  • Information : اطلاع رسانی پیغام هایی که پیشرفت برنامه را کاربر یا مدیر سیستم نمایش می دهد.
  • Debug : اطلاعات مربوط به دیباگ سیستم (extended information)
  • Verbose : برای رهگیری کد اطلاعاتی نمایش می دهد (tracing the code)

اولویت بندی و سطح بندی لاگ ها بر اساس شدت و اهمیت با استفاده از سطوح مختلف لاگ

یگپارچگی راحت با ابزارهایی مثل Seq , Elastic Search

Override logger

پشتیبانی از انواع Sink

  • Sink : ذخیره پیغام ها در storage با فرمت های مختلف
  • Serilog برای نوشتن لاگ رویدادها در قالب های مختلف ذخیره سازی sink هایی را ارائه می دهد. این sink ها توسط جامعه گستردهSerilog توسعه یافته و پشتیبانی می شوند. که به صورت استاندارد داخل فایل یا کنسول ذخیره می شود.


از معروف ترین sink های Serilog می توان به موارد زیر اشاره کرد:

  • مثال هایی از sink ها که با Serilog پیاده شده اند
  • Serilog.sinks.File
  • Serilog.sinks.Telegram
  • Serilog.Sinks.MongoDb
  • Serilog.Sinks.ElasticSearch
  • Serilog.Sinks.Seq

Logs in seq

Seq یک سرور جستجو ، تحلیل و هشدار است که برای لاگ کردن دیتای مدرن و ساختار یافته استفاده می شود . برای پیاده سازی آن باید nugget ان را به پروژه اضافه می کنیم و config مربوط به ان را در appsetting اضافه می کنیم که در آن محل ذخیره سازی لاگ نیز مشخص می شود


Seq ویژگی های زیادی دارد که یکی از مهمترین مشخصه آن وجود داشبورد است که errors/exceptions/events را به صورت گرافیکی زیبا نمایش می دهد.


Logs in ELK using serilog

یک ELK موتور متن باز و ساختار یافته برای جستجو و تحلیل دیتاهای بزرگ استفاده می شود

پکیج مربوط به آن را برای پیاده سازی اضافه می کنیم و config لازم را اضافه می کنیم

ساختار؟

در گذشته پیغام های لاگ به صورت string هست اما Serilog به صورت ساختار یافته نمایش داده می شود و با فرمت Json هم نمایش داده می شود.

  • مزایای ساختاری بودن
  • خوانایی بالا
  • تحلیل و فیلتر راحت تر دیتاها
  • آنالیز راحت تر لاگ ها در زمان دیباگ و troubleshooting

ساختار Serilog

  • Exception : شامل پیغام خطا و stack trace (نحوه رهگیری) ، در صورتی که خالی باشد ExceptionEmpty نمایش داده می شود.
  • Level : سطح لاگ را نمایش می دهد
  • Message :پیغام مربوط به اتفاقی که رخ داده به صورت متن ساده یا در حالت Json نمایش داده می شود
  • Properties مقادیر مربوط به property ها که در خروجی نمایش داده می شود
  • Timestamp : زمان ایجاد لاگ.



پیاده سازی

1. نصب پکیج های زیر

2. Config project

3. Add Iserilog to controller

منابع

https://satyampushkar.medium.com/serilog-logging-to-console-seq-elasticsearch-file-using-dotnet6-d9536b534209

https://code-maze.com/structured-logging-in-asp-net-core-with-serilog/

https://serilog.net/

فریم ورکopen sourcelogging
شاید از این پست‌ها خوشتان بیاید