ZetCode

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。

Program.cs
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 在添加我们选择的提供程序之前会移除默认提供程序。

Controllers/WeatherController.cs
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 中进行配置。

来源

Microsoft 日志记录文档

在本文中,我们探讨了 ASP.NET 8 中的 ILogger 接口。这种强大的日志记录抽象有助于有效监视应用程序行为和诊断问题。

作者

我叫 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出所有 ASP.NET 教程