Ghi nhật ký ứng dụng ASP.NET Core sử dụng NLog

Thiết lập dự án ASP.NET Core API

Tạo ứng dụng web ASP.NET Core chọn template API

Cài đặt gói NuGet

dotnet add package NLog
dotnet add package NLog.Web.AspNetCore

Cấu hình tập tin nlog.config

Thêm tệp cấu hình với thuộc tính "Copy to Output Directory: Always"

<?xml version="1.0" encoding="utf-8"?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      autoReload="true"
      internalLogLevel="Info">
  
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

  <targets>
    <target name="allLogs" type="File" 
            fileName="logs/all-${shortdate}.log"
            layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
            
    <target name="appLogs" type="File" 
            fileName="logs/app-${shortdate}.log"
            layout="${longdate}|${level}|${logger}|${message}|${aspnet-request-url}" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="allLogs" />
    <logger name="Microsoft.*" maxlevel="Info" final="true" />
    <logger name="*" minlevel="Debug" writeTo="appLogs" />
  </rules>
</nlog>

Cấu hình appsettings.json

"Logging": {
  "LogLevel": {
    "Default": "Information",
    "System": "Warning"
  }
}

Đăng ký dịch vụ logging

Phương pháp 1: Cấu hình Program.cs

public static void Main(string[] args) {
  NLogBuilder.ConfigureNLog("nlog.config");
  CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder => {
      webBuilder.UseStartup<Startup>();
    })
    .ConfigureLogging(logging => {
      logging.ClearProviders();
    })
    .UseNLog();

Phương pháp 2: Cấu hình Startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
  env.ConfigureNLog("nlog.config");
  app.UseRouting();
  // Các cấu hình middleware khác
}

Ghi nhật ký trong Controller

[ApiController]
[Route("api/[controller]")]
public class AuthController : ControllerBase {
  private readonly ILogger<AuthController> _logger;

  public AuthController(ILogger<AuthController> logger) {
    _logger = logger;
  }

  [HttpGet("authenticate")]
  public IActionResult Authenticate() {
    _logger.LogInformation("Yêu cầu xác thực");
    _logger.LogWarning("Cảnh báo xác thực");
    _logger.LogError("Lỗi xác thực");
    return Ok();
  }
}

Mức độ nhật ký

Các mức độ theo thứ tự quan trọng:

  • Trace (Chi tiết nhất)
  • Debug
  • Information
  • Warning
  • Error
  • Critical (Nghiêm trọng nhất)

Tùy chỉnh cấu hình

Tham khảo tài liệu chính thức:

  • Mẫu cấu hình: https://github.com/NLog/NLog/wiki
  • Thẻ target: https://nlog-project.org/config/?tab=targets
  • Bố cục log: https://nlog-project.org/config/?tab=layouts

Thẻ: ASP.NET Core NLog logging C# Web API

Đăng vào ngày 29 tháng 5 lúc 02:27