.NET 6 中的日志框架主要是基于 Microsoft.Extensions.Logging,这是一个通用的、可扩展的日志记录接口,允许使用不同的日志提供程序(例如控制台、文件、第三方库等)进行日志记录。本文主要介绍 .NET 6 (C#) 中 Microsoft.Extensions.Logging 日志框架的使用,以及相关的示例代码。

1、安装引用 Microsoft.Extensions.Logging

使用 Microsoft.Extensions.Logging日志框架,需要安装引用 Microsoft.Extensions.Logging,安装的方法有多种,分别如下,

1)使用Nuget界面管理器

搜索 "Microsoft.Extensions.Logging" 在列表中分别找到它,点击"安装"

相关文档VS(Visual Studio)中Nuget的使用

2)使用Package Manager命令安装

PM> Install-Package Microsoft.Extensions.Logging

3)使用.NET CLI命令安装

> dotnet add package Microsoft.Extensions.Logging

另外,还需要根据需要安装日志提供程序,如Microsoft.Extensions.Logging.Console、Microsoft.Extensions.Logging.File 等。

2、通过依赖方式使用

1)配置日志

在应用程序的启动时,在 Program.cs 文件的 CreateHostBuilder 方法中配置,代码如下,

using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        host.Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging((hostingContext, logging) =>
            {
                logging.ClearProviders(); // 清除默认提供程序
                logging.AddConsole();     // 添加控制台日志提供程序
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
}

2)使用日志

在应用程序的代码中,可以通过依赖注入来获取实例记录日志,代码如下,

using Microsoft.Extensions.Logging;

public class MyService
{
    private readonly ILogger<MyService> _logger;

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

    public void DoSomething()
    {
        _logger.LogInformation("Doing something...");
        // 其他逻辑
    }
}

3、通过实例直接使用

有些情况,需要更早记录日志,可能不使用依赖入方式,而是直接获取日志实例记录日志,此时需要手动直接创建日志对象,代码如下,

using Microsoft.Extensions.Logging;

public class Program
{
    public static void Main(string[] args)
    {
        //配置日志
        var configuration = new ConfigurationBuilder() // 添加所有使用的配置
            .AddJsonFile("appsettings.json", false, true)
            .AddEnvironmentVariables()
            .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", true, true)
            .Build();
        using var loggerFactory = LoggerFactory.Create(loggingBuilder => loggingBuilder
            .AddConfiguration(configuration)
            .AddApplicationInsights());
        //使用日志
        ILogger logger = loggerFactory.CreateLogger<Program>();
        logger.LogInformation("Example log message");
        var host = CreateHostBuilder(args).Build();
        host.Run();
    }

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

推荐文档