ASP.NET ILogger
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 ILogger 接口。该接口为 .NET 应用程序提供了强大的日志记录抽象。它有助于跟踪应用程序行为并诊断问题。
ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。ILogger 是 Microsoft.Extensions.Logging 命名空间的一部分。它支持结构化日志记录和多种日志记录提供程序。
基本定义
ILogger 是一个泛型接口,提供用于在不同严重性级别记录消息的方法。它是 .NET 内置日志记录基础架构的一部分。
该接口支持六个日志级别:Trace、Debug、Information、Warning、Error 和 Critical。每个级别代表日志事件日益严重的程度。
ILogger 可与 Console、Debug、EventLog 等各种日志记录提供程序以及第三方解决方案配合使用。它开箱即用地支持 ASP.NET 中的依赖注入。
ASP.NET ILogger 示例
以下示例演示了如何在 ASP.NET 8 Web API 控制器中使用 ILogger。
var builder = WebApplication.CreateBuilder(args); // Configure logging builder.Logging.ClearProviders(); builder.Logging.AddConsole(); builder.Logging.AddDebug(); builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); app.Run();
这设置了一个基本的 ASP.NET 应用程序,具有控制台和调试日志记录。ClearProviders 在添加我们选择的提供程序之前会移除默认提供程序。
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
[ApiController]
[Route("[controller]")]
public class WeatherController : ControllerBase
{
private readonly ILogger<WeatherController> _logger;
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild",
"Warm", "Balmy", "Hot", "Sweltering", "Scorching"
};
public WeatherController(ILogger<WeatherController> logger)
{
_logger = logger;
_logger.LogInformation("WeatherController initialized");
}
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
_logger.LogDebug("Entering Get method");
try
{
var rng = new Random();
var forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
_logger.LogInformation("Generated {Count} weather forecasts", forecasts.Length);
return forecasts;
}
catch (Exception ex)
{
_logger.LogError(ex, "Error generating weather forecasts");
throw;
}
finally
{
_logger.LogDebug("Exiting Get method");
}
}
}
public record WeatherForecast(DateTime Date, int TemperatureC, string? Summary)
{
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
}
此控制器演示了各种 ILogger 用法模式。通过构造函数注入将记录器注入,具体类型为 ILogger<WeatherController>。
该示例展示了不同级别的日志记录:Initialization 使用 Information,方法入口/出口使用 Debug,异常使用 Error。LogInformation 调用演示了带有 count 参数的结构化日志记录。
LogError 方法同时捕获错误消息和异常对象。这会在日志中提供完整的堆栈跟踪信息。结构化日志记录有助于日志分析和过滤。
运行此应用程序时,日志消息将同时出现在控制台输出和调试输出窗口中。日志级别可以在 appsettings.json 中进行配置。
来源
在本文中,我们探讨了 ASP.NET 8 中的 ILogger 接口。这种强大的日志记录抽象有助于有效监视应用程序行为和诊断问题。