TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 549 subscribers
Post #201 99
5 شیوه برتر (Best Practice) برای لاگینگ ساختاریافته بهتر با Serilog 📝


سریلاگ یک کتابخانه لاگینگ ساختاریافته (structured logging) برای NET. است.Serilog از مقصدهای لاگینگ زیادی به نام Sinks پشتیبانی می‌کند. مقصدهای لاگ از سینک‌های کنسول و فایل گرفته تا سرویس‌های مدیریت شده لاگینگ مانند Application Insights را شامل می‌شود.
امروز، می‌خواهم ۵ نکته عملی برای لاگینگ ساختاریافته بهتر با Serilog را به اشتراک بگذارم.

1️⃣ از سیستم پیکربندی (Configuration System) استفاده کنید ⚙️


شما می‌توانید Serilog را در ASP.NET Core به دو روش پیکربندی کنید:
سیستم پیکربندی _ Fluent API

Fluent API
به شما امکان می‌دهد با کد، Serilog را به راحتی پیکربندی کنید. عیب آن این است که شما پیکربندی خود را هاردکد می‌کنید. هرگونه تغییر در پیکربندی نیازمند دیپلوی یک نسخه جدید است.
من ترجیح می‌دهم از سیستم پیکربندی ASP.NET برای راه‌اندازی Serilog استفاده کنم. مزیت آن این است که می‌توانید پیکربندی لاگینگ را بدون دیپلوی مجدد اپلیکیشن خود تغییر دهید.
شما باید کتابخانه Serilog.Settings.Configuration را نصب کنید.
این به شما امکان می‌دهد Serilog را با استفاده از سیستم پیکربندی، کانفیگ کنید:
builder.Host.UseSerilog((context, loggerConfig) =>
loggerConfig.ReadFrom.Configuration(context.Configuration));


در اینجا یک پیکربندی Serilog با سینک‌های Console و Seq آمده است. ما همچنین چند Serilog enricher را برای غنی‌سازی لاگ‌های اپلیکیشن با اطلاعات اضافی پیکربندی می‌کنیم.
{
"Serilog": {
"Using": ["Serilog.Sinks.Console", "Serilog.Sinks.Seq"],
"MinimumLevel": {
"Default": "Information",
"Override": { "Microsoft": "Information" }
},
"WriteTo": [
{ "Name": "Console" },
{
"Name": "Seq",
"Args": { "serverUrl": "http://localhost:5341" }
}
],
"Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"]
}
}


2️⃣ از لاگینگ درخواست Serilog استفاده کنید 🌐


شما می‌توانید کتابخانه Serilog.AspNetCore را نصب کنید تا لاگینگ Serilog را برای پایپ‌لاین درخواست ASP.NET Core اضافه کنید. این قابلیت، عملیات داخلی ASP.NET را به همان سینک‌های Serilog که رویدادهای اپلیکیشن شما ثبت می‌شوند، اضافه می‌کند.
تنها کاری که باید انجام دهید، فراخوانی متد UseSerilogRequestLogging است:
app.UseSerilogRequestLogging();


3️⃣ لاگ‌های خود را با CorrelationId غنی‌سازی کنید 🔗


چگونه می‌توانید تمام لاگ‌های مربوط به یک درخواست واحد را ردیابی کنید؟
شما می‌توانید یک پراپرتی CorrelationId به لاگ‌های ساختاریافته خود اضافه کنید.
این همچنین در چندین اپلیکیشن کار می‌کند. شما باید CorrelationId را با استفاده از یک هدر HTTP پاس دهید. برای مثال، می‌توانید از یک هدر سفارشی X-Correlation-Id استفاده کنید.

در RequestContextLoggingMiddleware، من CorrelationId را به LogContext Serilog اضافه می‌کنم. این کار آن را برای تمام لاگ‌های ایجاد شده در طول این درخواست اپلیکیشن در دسترس قرار می‌دهد.
public class RequestContextLoggingMiddleware
{
private const string CorrelationIdHeaderName = "X-Correlation-Id";
// ...
public Task Invoke(HttpContext context)
{
string correlationId = GetCorrelationId(context);
using (LogContext.PushProperty("CorrelationId", correlationId))
{
return _next.Invoke(context);
}
}
// ...
}
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →