使用serilog将日志保存为日志文本

在ASP.NET Core中,你可以使用两种方式来集成和使用 Serilog 进行日志记录:依赖注入模式和静态日志记录模式。以下是对这两种方式的详细解释和实现:

依赖注入模式

在依赖注入模式中,Serilog通过ASP.NET Core的内建依赖注入容器来进行配置。你可以将ILogger注入到你的控制器、服务或其他类中,并通过注入的ILogger实例来进行日志记录。

配置 Serilog(依赖注入模式)

在ASP.NET Core中,通常会在 Program.csStartup.cs 文件中进行Serilog的配置。

Program.cs 配置(ASP.NET Core 6及以上版本)
1
2
3
4
5
6
7
8
9
10
11
12
13
using Serilog;

// 配置Serilog(通过依赖注入模式)
Log.Logger = new LoggerConfiguration()
.WriteTo.Console() // 输出到控制台
.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // 输出到文件,按天滚动
.CreateLogger();

// 将Serilog作为日志提供程序集成到ASP.NET Core的日志系统中
builder.Logging.ClearProviders(); // 清除默认的日志提供程序
builder.Logging.AddSerilog(); // 使用Serilog作为日志提供程序


使用注入的 ILogger 记录日志

一旦配置完成,你就可以在控制器、服务或其他类中通过依赖注入来使用日志。ASP.NET Core会自动将ILogger注入到你的类中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;

public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;

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

public IActionResult Index()
{
_logger.LogInformation("This is an info log message.");
_logger.LogWarning("This is a warning log message.");
_logger.LogError("This is an error log message.");

return View();
}
}

静态日志记录模式

静态日志记录模式使用Serilog的静态Log类进行日志记录。你不需要依赖注入,但需要手动配置和使用Serilog

配置 Serilog(静态模式)

在ASP.NET Core中,你可以使用静态Log类直接记录日志。首先,在Program.csStartup.cs文件中进行Serilog的配置。

配置 Serilog(静态模式)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using Serilog;

public class Program
{
public static void Main(string[] args)
{
// 配置Serilog(静态模式)
Log.Logger = new LoggerConfiguration()
.WriteTo.Console() // 输出到控制台
.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // 输出到文件,按天滚动
.CreateLogger();

try
{
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Application start-up failed");
}
finally
{
Log.CloseAndFlush();
}
}

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

在上述代码中,使用Log.Logger进行静态日志配置。这里你不需要通过依赖注入传递ILogger,只需要通过Log.Information(), Log.Warning()等方法直接记录日志。

使用静态Log类记录日志

你可以在应用中的任何地方直接使用Log类来记录日志,而不需要依赖注入。例如:

1
2
3
4
5
6
7
8
9
10
11
public class HomeController : Controller
{
public IActionResult Index()
{
Log.Information("This is an info log message.");
Log.Warning("This is a warning log message.");
Log.Error("This is an error log message.");

return View();
}
}

对比依赖注入模式和静态模式

特性 依赖注入模式 静态模式
配置 配置通过builder.Logging.AddSerilog()app.UseSerilogRequestLogging()完成。 配置通过静态Log.Logger完成。
灵活性 更加灵活,适合在多个类中使用,不需要手动管理日志对象。 静态日志类,适合简单的日志需求。
依赖注入支持 支持依赖注入,可以在控制器、服务等类中注入ILogger 不支持依赖注入,直接使用Log类记录日志。
可测试性 高,可通过模拟和注入ILogger进行单元测试。 低,难以模拟和测试。
使用场景 推荐在复杂的应用中,尤其是当你需要记录不同上下文中的日志时。 适合简单的日志需求,不需要复杂的配置和管理。

总结

  • 依赖注入模式:推荐用于复杂应用程序,能够灵活地在应用的不同部分记录日志,并且支持单元测试。
  • 静态模式:适合简单应用程序,直接使用Log类记录日志,但不适合大规模应用程序,因为它会使测试和日志管理变得更为困难。

你可以根据项目的需求和复杂性选择适合的方式。