4️⃣ رویدادهای مهم اپلیکیشن را لاگ کنید 📌
به طور کلی، من سعی میکنم رویدادهای مهم را در اپلیکیشن خود لاگ کنم. این شامل اطلاعات درخواست فعلی، خطاها، شکستها، مقادیر غیرمنتظره، نقاط انشعاب و غیره است.
اگر از الگوی CQRS با MediatR استفاده میکنید، میتوانید به راحتی لاگینگ را برای تمام درخواستهای اپلیکیشن اضافه کنید.
در RequestLoggingPipelineBehavior من پراپرتی Error را به LogContext پوش میکنم.
internal sealed class RequestLoggingPipelineBehavior<TRequest, TResponse>
: IPipelineBehavior<TRequest, TResponse>
where TRequest : class
where TResponse : Result
{
// ...
public async Task<TResponse> Handle(...)
{
// ...
TResponse result = await next();
if (result.IsSuccess) { /* ... */ }
else
{
using (LogContext.PushProperty("Error", result.Error, true))
{
_logger.LogError(
"Completed request {RequestName} with error", requestName);
}
}
return result;
}
}
5️⃣ از Seq برای توسعه محلی استفاده کنید 🔍
Seq
یک سرور جستجو، تحلیل و هشدار self-hosted است که برای دادههای لاگ ساختاریافته ساخته شده است. استفاده از آن برای توسعه محلی رایگان است. این ابزار قابلیتهای جستجو و فیلترینگ پیشرفتهای را روی دادههای لاگ ساختاریافته ارائه میدهد.
میتوانید یک نمونه Seq را در یک کانتینر Docker بالا بیاورید:
version: '3.4'
services:
seq:
image: datalust/seq:latest
container_name: seq
environment:
- ACCEPT_EULA=Y
ports:
- 5341:5341
- 8081:80
`
خلاصه ✅
لاگهای ساختاریافته از یک ساختار یکسان پیروی میکنند و چون قابل خواندن توسط ماشین هستند، میتوانید آنها را برای اطلاعات خاص جستجو کنید. آنها زمینه و جزئیات بیشتری در مورد خطاهای اپلیکیشن ارائه میدهند و شناسایی و رفع مشکلات را آسانتر میکنند.
شما میتوانید از LogContext قدرتمند Serilog برای غنیسازی لاگهای خود با یک CorrelationId استفاده کنید.
🔖 هشتگها:
#CSharp #DotNet #Logging #StructuredLogging #Observability #Serilog