9 Mẹo Vàng Để Ghi Nhật Ký Hiệu Quả Trong Ứng Dụng .NET Core
Ghi nhật ký là một phần quan trọng trong việc phát triển và vận hành bất kỳ ứng dụng nào, đặc biệt là trong môi trường thực tế. Nhờ vào việc ghi nhật ký, các nhà phát triển có thể dễ dàng theo dõi hoạt động của ứng dụng, phát hiện sự cố, và giám sát hiệu suất.
Trong bài viết này, tôi sẽ chia sẻ những diễn giải và khuyến nghị về cách ghi nhật ký hiệu quả nhất trong ứng dụng ASP.NET Core, với 9 mẹo rõ ràng và dễ áp dụng.
1. Sử Dụng Thư Viện Serilog Để Ghi Nhật Ký
Mặc dù ASP.NET Core đã có sẵn nhà cung cấp dịch vụ ghi nhật ký Microsoft.Extensions.Logging
, nhưng để có thêm những tính năng mạnh mẽ hơn, bạn nên xem xét sử dụng Serilog. Serilog cho phép bạn ghi nhật ký cấu trúc, dễ dàng xuất nhật ký ra nhiều nguồn khác nhau như console, file, hoặc hệ thống giám sát.
Cài Đặt Serilog
Để bắt đầu, bạn có thể cài đặt các gói NuGet cần thiết:
dotnet add package Serilog.AspNetCore
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
Cấu Hình
Sau đó, định cấu hình ghi nhật ký trong tệp appsettings.json
của bạn:
json
{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.File"
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information"
}
},
"WriteTo": [
{ "Name": "Console" },
{ "Name": "File", "Args": { "path": "service.log", "rollingInterval": "Day" } }
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": "ApplicationName"
}
}
}
Cuối cùng, bạn cần đăng ký Serilog trong cấu hình ứng dụng:
var builder = WebApplication.CreateBuilder(args);
builder.Host.UseSerilog((context, loggerConfig) =>
loggerConfig.ReadFrom.Configuration(context.Configuration)
);
2. Sử Dụng Mức Ghi Nhật Ký Phù Hợp
Đối với mỗi ứng dụng, việc sử dụng các mức ghi nhật ký khác nhau rất quan trọng để quản lý thông tin. Các mức ghi nhật ký bao gồm:
- Trace: Cung cấp thông tin chi tiết nhất, nhưng thường tắt theo mặc định.
- Debug: Thích hợp cho quá trình phát triển, thường xuyên sử dụng trong giai đoạn thử nghiệm.
- Information: Theo dõi luồng chung của ứng dụng.
- Warning: Đánh dấu các sự kiện không mong muốn mà không làm dừng ứng dụng.
- Error: Thể hiện các lỗi có thể làm gián đoạn luồng thực thi.
- Critical: Các lỗi nghiêm trọng cần được chú ý ngay lập tức.
3. Áp Dụng Bộ Lọc Ghi Nhật Ký
Nhật ký có thể tạo ra một lượng lớn dữ liệu. Để quản lý điều này, sử dụng bộ lọc để chỉ ghi lại những thông tin quan trọng.
json
{
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"OpenTelemetry": "Debug"
}
},
"WriteTo": [
...
]
}
}
4. Ghi Nhật Ký Có Cấu Trúc
Việc ghi nhật ký có cấu trúc giúp bạn dễ dàng truy vấn và phân tích hơn. Hãy chắc chắn sử dụng các tham số có cấu trúc thay vì nhúng dữ liệu vào văn bản thuần túy.
csharp
logger.LogInformation("Shipment for order '{OrderId}' is already created", request.OrderId);
5. Tránh Ghi Lại Thông Tin Nhạy Cảm
Đảm bảo rằng bạn không ghi lại các thông tin như mật khẩu, số thẻ tín dụng hay thông tin cá nhân nhạy cảm để bảo vệ người dùng và tuân thủ các quy định bảo mật.
6. Ghi Lại Các Lỗi Một Cách Chi Tiết
Khi có lỗi xảy ra, việc ghi nhớ các thông tin chi tiết như ngữ cảnh và thông tin kết nối là rất quan trọng để xử lý sự cố:
try
{
// Mã có thể tạo ra ngoại lệ
}
catch (Exception ex)
{
Log.Error(ex, "An unexpected error occurred");
}
7. Kiểm Soát Kích Thước Và Hiệu Suất Ghi Nhật Ký
Giới hạn kích thước nhật ký bằng cách sử dụng luân chuyển và lưu giữ nhật ký:
csharp
Log.Logger = new LoggerConfiguration()
.WriteTo.File(
"logs/service.log",
rollingInterval: RollingInterval.Day,
retainedFileCountLimit: 7)
.CreateLogger();
8. Tập Trung Và Trực Quan Hóa Nhật Ký
Sử dụng các công cụ trực quan hóa như Seq sẽ giúp bạn quản lý và theo dõi nhật ký của mình dễ dàng hơn, cung cấp một cái nhìn tổng quát về tình hình của hệ thống.
dotnet add package Serilog.Sinks.Seq
9. Xem Xét Các Giải Pháp Thay Thế
Nếu bạn cần một công cụ khác ngoài Seq, có nhiều lựa chọn như ELK Stack, Datadog, New Relic, hoặc Azure Monitor Logs.
Hy vọng rằng những mẹo này sẽ giúp bạn tối ưu hóa việc ghi nhật ký trong ứng dụng .NET Core của mình để nâng cao hiệu suất và bảo mật. Hãy thử áp dụng những phương pháp này trong dự án của bạn và cảm nhận sự khác biệt trong quá trình phát triển và vận hành ứng dụng.
source: viblo