Serilog چیست؟
کتابخانه Logging ساختیافته (Structured Logging) محبوب داتنت که پیام لاگ را بههمراه فیلدهای جداگانه ذخیره میکند، نه فقط یک رشته متنی.
چرا مهم است؟
لاگ متنی ساده برای جستوجو و تحلیل حجم بالا (مثلاً «همه خطاهای این Endpoint در یک ساعت گذشته») دشوار است؛ Logging ساختیافته اجازه میدهد لاگها را مثل داده Query کنید.
تعریف
Serilog بهجای قالببندی رشته ساده، هر مقدار را بهعنوان یک Property جدا (Structured) ذخیره میکند که در ابزارهایی مثل Seq/Elasticsearch/Grafana قابل فیلتر و جستوجوی دقیق است.
مثال
builder.Host.UseSerilog((context, config) => config
.WriteTo.Console()
.WriteTo.Seq("http://localhost:5341")
.Enrich.FromLogContext());
_logger.LogInformation("سفارش {OrderId} برای مشتری {CustomerId} ثبت شد با مبلغ {Amount}",
order.Id, order.CustomerId, order.Total);
برخلاف رشته الحاقشده ($"سفارش {order.Id}...")، اینجا OrderId/CustomerId/Amount بهعنوان فیلدهای جدا و قابلجستوجو ذخیره میشوند.
Sink (مقصد خروجی)
Serilog از Sinkهای متعدد پشتیبانی میکند: Console، فایل، Seq، Elasticsearch، Application Insights — هرکدام با یک خط WriteTo قابل اضافهکردن.
اشتباه رایج
❌ استفاده از Interpolation رشته ($"...") بهجای Placeholder Serilog ({OrderId}) — این کار مزیت اصلی Structured Logging (فیلدهای جدا و قابل جستوجو) را از بین میبرد و همهچیز را به یک رشته متنی ساده تبدیل میکند.
منبع و مطالعه بیشتر
خلاصه
Serilog با Logging ساختیافته هر مقدار را بهعنوان فیلد جدا و قابلجستوجو ذخیره میکند، نه رشته متنی ساده. همیشه از Placeholder ({OrderId}) استفاده کنید، نه Interpolation رشته. مرجع کامل: مستندات رسمی Serilog.
