.NET 通过 Serilog 和 Application Insights 简化 ASP.NET Core 日志记录

发布:2024-09-12 16:15 阅读:11 点赞:0

一. 引言

日志记录在应用程序开发中至关重要,它帮助我们监控和排查应用程序中的问题和错误。Serilog 是一个流行的日志记录库,它提供了结构化日志功能,使得问题的识别和解决更加高效。

Serilog 是专为 .NET 应用程序设计的诊断日志库。它提供了简单、灵活且强大的日志记录方式,可以记录应用程序事件、错误及其他相关信息。Serilog 的一个主要优点是支持结构化日志记录,允许开发者记录丰富的结构化数据,而不仅仅是简单的文本消息。

在这篇文章中,我们将学习如何在 ASP.NET Core Web API 项目中使用 Serilog 和 AppInsights 实现应用程序日志记录。

二. 实现步骤

2.1 创建 ASP.NET Core Web API 应用程序

  1. 打开 Visual Studio,选择“创建新项目”。
  2. 选择“ASP.NET Core Web API”模板,点击“下一步”。
  3. 为项目命名并选择项目位置,然后点击“创建”。
  4. 选择 .NET 8 作为项目框架,如下图所示。项目框架

2.2 安装必要的 NuGet 包

在 NuGet 包管理器中安装以下包:

  • Serilog
  • Serilog.AspNetCore
  • Serilog.Sinks.File
  • Serilog.Sinks.ApplicationInsights

2.3 配置 Serilog

在 appsettings.json 文件中配置 Serilog。下面是配置示例,其中包含了日志记录到 Application Insights 的设置。

{
  "Serilog": {
    "Using": [
      "Serilog.Sinks.ApplicationInsights"
    ],
    "MinimumLevel": {
      "Default""Information",
      "Override": {
        "Microsoft""Warning",
        "System""Warning"
      }
    },
    "WriteTo": [
      {
        "Name""ApplicationInsights",
        "Args": {
          "connectionString""",
          "telemetryConverter""Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext" ],
    "Properties": {
      "Application""Connect.IMS"
    }
  }
}

注意: 为了使上述配置生效,您需要拥有 Azure 订阅,并且已经创建了 Application Insights。

2.4 在 Program.cs 中添加 Serilog 配置

在 Program.cs 文件中,添加 Serilog 配置:

builder.Host.UseSerilog((context, configuration) =>
    configuration.ReadFrom.Configuration(context.Configuration));

2.5 添加 Serilog 中间件

在 Program.cs 文件中,app.Run() 之前添加 Serilog 中间件:

app.UseSerilogRequestLogging();

2.6 在 C# 类中记录日志

以下是 TestController 中的日志记录示例:

using Microsoft.AspNetCore.Mvc;

namespace SampleLogger.Controllers;

[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
    private readonly ILogger _logger;

    public TestController(ILogger logger)
    {
        _logger = logger;
    }

    [HttpGet]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public IActionResult Get()
    {
        _logger.LogInformation("Test Controller called!");
        return Ok();
    }
}

三. 结论

通过集成 Serilog,开发者可以生成更详细和可操作的日志数据,从而改进调试、监控和系统维护。Serilog 的结构化日志记录功能使得分析和可视化日志变得更加容易,对于现代应用程序来说至关重要。通过使用 Serilog,您可以显著提高应用程序的可追溯性、可靠性和整体性能。希望本文对您有所帮助。