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);
}
}
// ...
}