C# ASP.NET Core Serilog 添加类名和方法进行日志记录

作者:编程家 分类: 编程代码 时间:2025-09-10

使用Serilog库可以很方便地在C# ASP.NET Core应用程序中进行日志记录。Serilog提供了一种简单而强大的方式来捕获应用程序的运行时信息,以便于调试、故障排除和性能优化。本文将介绍如何使用Serilog来添加类名和方法进行日志记录,并提供一个使用Serilog的实际案例。

什么是Serilog

Serilog是一个功能强大的日志记录库,它允许开发人员以结构化的方式记录应用程序的运行时信息。与传统的日志记录库相比,Serilog提供了更丰富的日志信息,包括时间戳、日志级别、类名、方法名等。这些信息可以帮助开发人员更好地理解应用程序的运行情况,并快速定位问题。

为什么要添加类名和方法进行日志记录

在开发过程中,我们经常需要知道某个日志是在哪个类的哪个方法中记录的。这对于调试和故障排除非常有帮助。通过记录类名和方法名,我们可以轻松地追踪日志的来源,从而更准确地定位和解决问题。

如何使用Serilog添加类名和方法进行日志记录

为了在日志中添加类名和方法名,我们可以使用Serilog的Enrichers扩展库。Enrichers库提供了一系列的扩展方法,可以将类名和方法名添加到日志的上下文中。

首先,我们需要在ASP.NET Core应用程序中安装Serilog和Serilog.Enrichers库。可以通过NuGet包管理器或者命令行来安装。

csharp

Install-Package Serilog

Install-Package Serilog.Enrichers.Environment

Install-Package Serilog.Enrichers.Thread

Install-Package Serilog.Enrichers.Process

Install-Package Serilog.Enrichers.Assembly

安装完成后,在`Program.cs`文件中进行Serilog的配置。我们可以使用`UseSerilog`方法替换默认的日志记录器。

csharp

public static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.UseStartup();

})

.UseSerilog((hostingContext, loggerConfiguration) =>

{

loggerConfiguration

.ReadFrom.Configuration(hostingContext.Configuration)

.Enrich.FromLogContext()

.Enrich.WithMachineName()

.Enrich.WithProcessId()

.Enrich.WithThreadId()

.Enrich.WithAssemblyName();

});

在需要记录日志的类中,我们可以使用Serilog的`ILogger`接口来记录日志。在调用日志记录方法之前,我们可以使用`ForContext`方法创建一个新的日志上下文,并传入类名和方法名。

csharp

public class HomeController : Controller

{

private readonly ILogger _logger;

public HomeController(ILogger logger)

{

_logger = logger;

}

public IActionResult Index()

{

var logger = _logger.ForContext().ForContext("Method", nameof(Index));

logger.LogInformation("Index page visited");

return View();

}

}

上面的代码中,我们使用`ForContext`方法创建了一个新的日志上下文,并传入了类名和方法名。然后,通过调用`LogInformation`方法记录了一条日志。

案例代码

下面是一个使用Serilog记录日志的ASP.NET Core应用程序的示例代码。该示例演示了如何使用Serilog的Enrichers库记录带有类名和方法名的日志。

csharp

using Microsoft.AspNetCore.Hosting;

using Microsoft.Extensions.Hosting;

using Microsoft.Extensions.Logging;

using Serilog;

namespace SerilogDemo

{

public class Program

{

public static void Main(string[] args)

{

Log.Logger = new LoggerConfiguration()

.Enrich.FromLogContext()

.Enrich.WithMachineName()

.Enrich.WithProcessId()

.Enrich.WithThreadId()

.Enrich.WithAssemblyName()

.WriteTo.Console()

.CreateLogger();

try

{

Log.Information("Starting web host");

CreateHostBuilder(args).Build().Run();

}

catch (System.Exception ex)

{

Log.Fatal(ex, "Host terminated unexpectedly");

}

finally

{

Log.CloseAndFlush();

}

}

public static IHostBuilder CreateHostBuilder(string[] args) =>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder =>

{

webBuilder.UseStartup();

})

.UseSerilog();

}

}

csharp

using Microsoft.AspNetCore.Mvc;

using Microsoft.Extensions.Logging;

namespace SerilogDemo.Controllers

{

public class HomeController : Controller

{

private readonly ILogger _logger;

public HomeController(ILogger logger)

{

_logger = logger;

}

public IActionResult Index()

{

var logger = _logger.ForContext().ForContext("Method", nameof(Index));

logger.LogInformation("Index page visited");

return View();

}

}

}

以上代码中,我们在`Program.cs`文件中配置了Serilog,并在`HomeController.cs`文件中使用Serilog记录了一条带有类名和方法名的日志。

通过使用Serilog的Enrichers库,我们可以轻松地在C# ASP.NET Core应用程序中添加类名和方法进行日志记录。这样的日志记录方式可以帮助开发人员更好地追踪日志的来源,从而更准确地定位和解决问题。希望本文提供的示例代码和说明对你有所帮助,欢迎使用Serilog来改善你的应用程序的日志记录。