首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ASP.NET Core 日志(Logging)详解:从基础到实战

ASP.NET Core 日志(Logging)详解:从基础到实战

作者头像
郑子铭
发布2025-07-16 15:20:57
发布2025-07-16 15:20:57
22900
代码可运行
举报
运行总次数:0
代码可运行

在 ASP.NET Core 中,日志(Logging) 是一个内置且高度可扩展的机制,用于记录应用程序的运行时信息、错误、警告或其他调试数据。它帮助开发者监控和诊断应用行为,尤其在开发、测试和生产环境中至关重要。

本文将全面介绍 ASP.NET Core 的日志系统,包括核心组件、配置方式、使用方法、第三方集成以及最佳实践。

一、日志框架概述

ASP.NET Core 使用 Microsoft.Extensions.Logging 命名空间来实现其日志功能,主要包括以下核心组件:

  • ILogger 接口:定义了日志记录的方法,如 LogInformation, LogError 等。
  • ILoggerFactory:负责创建 ILogger 实例,管理日志提供程序。
  • ILoggerProvider:日志提供程序接口,决定日志输出的目标(控制台、文件、数据库等)。
  • LogLevel 枚举:表示日志的严重性级别,按优先级从低到高如下:
    • Trace(0)
    • Debug(1)
    • Information(2)
    • Warning(3)
    • Error(4)
    • Critical(5)
    • None(6)

这些组件协同工作,使得日志系统既灵活又易于扩展。


二、内置日志提供程序

ASP.NET Core 提供了多种内置的日志提供程序,适用于不同场景:

提供程序

描述

Console

输出日志到控制台,适合开发与调试

Debug

输出到 Visual Studio 的“输出”窗口

EventSource

跨平台事件跟踪工具

EventLog(仅限 Windows)

写入 Windows 事件日志

Application Insights

微软云端监控服务,适用于生产环境

此外,还可以通过 NuGet 包引入第三方日志库,如 Serilog, NLog, log4net 等,以增强日志功能。


三、配置日志

3.1 通过 appsettings.json 配置

这是最推荐的方式,支持按命名空间设置日志级别和提供程序:

代码语言:javascript
代码运行次数:0
运行
复制
{
  "Logging":{
    "LogLevel":{
      "Default":"Information",
      "Microsoft":"Warning",
      "MyApp.Controllers":"Debug"
    },
    "Console":{
      "IncludeScopes":true,
      "LogLevel":{
        "Default":"Debug"
      }
    }
}
}
  • Default: 默认日志级别。
  • Microsoft: 控制 Microsoft 框架内部日志。
  • Console: 设置特定提供程序的日志级别。

3.2 在代码中配置

也可以在 Program.csStartup.cs 中手动配置日志:

代码语言:javascript
代码运行次数:0
运行
复制
builder.Services.AddLogging(logging =>
{
    logging.ClearProviders(); // 清除默认提供程序
    logging.AddConsole();     // 添加控制台日志
    logging.AddDebug();       // 添加调试日志
    logging.SetMinimumLevel(LogLevel.Information); // 设置全局最低日志级别
});

四、使用日志

ASP.NET Core 支持通过依赖注入获取 ILogger<T>,其中 T 是调用类的类型,用于标识日志来源。

4.1 在控制器中使用日志

代码语言:javascript
代码运行次数:0
运行
复制
public classHomeController : Controller
{
    privatereadonly ILogger<HomeController> _logger;

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

    public IActionResult Index()
    {
        _logger.LogInformation("Index page accessed at {Time}", DateTime.Now);
        return View();
    }
}

4.2 日志方法示例

代码语言:javascript
代码运行次数:0
运行
复制
_logger.LogTrace("Trace message");
_logger.LogDebug("Debug message");
_logger.LogInformation("Info message");
_logger.LogWarning("Warning message");
_logger.LogError("Error message");
_logger.LogCritical("Critical error occurred");

4.3 结构化日志(Structured Logging)

使用参数化日志,便于后期查询和分析:

代码语言:javascript
代码运行次数:0
运行
复制
_logger.LogInformation("User {UserId} logged in at {Time}", userId, DateTime.Now);

4.4 记录异常信息

代码语言:javascript
代码运行次数:0
运行
复制
try
{
    // 可能抛出异常的代码
}
catch (Exception ex)
{
    _logger.LogError(ex, "An error occurred while processing the request");
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、日志框架概述
  • 二、内置日志提供程序
  • 三、配置日志
    • 3.1 通过 appsettings.json 配置
    • 3.2 在代码中配置
  • 四、使用日志
    • 4.1 在控制器中使用日志
    • 4.2 日志方法示例
    • 4.3 结构化日志(Structured Logging)
    • 4.4 记录异常信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档