发布于 2026-01-06 0 阅读
0

在 .NET 8 中使用 Serilog 和 Seq 进行日志记录

在 .NET 8 中使用 Serilog 和 Seq 进行日志记录

介绍

在本地开发时,我们可以轻松地使用断点和调试功能来检查代码并查看其运行情况。但将应用程序部署到其他环境(例如预发布环境或生产环境)后,就无法做到这一点了。当无法在本地进行调试时,我们可以依赖日志。
日志记录是一种跟踪应用程序运行情况的方法。我们可以编写日志来获取信息,也可以用于追踪应用程序中的错误。

使用 Serilog 进行日志记录

Serilog 是一个简单易用的 .NET 应用程序诊断日志库。它可在所有最新的 .NET 版本上运行,并且可以配置为将日志记录到文件、控制台和其他外部提供程序。

安装和配置 Serilog

我们可以通过命令行或 NuGet 包管理器安装 Serilog。

dotnet add package Serilog
Enter fullscreen mode Exit fullscreen mode

图片描述
安装完成后,我们可以在应用程序启动时设置 Serilog,通常是在 program.cs 文件中,使用 Serilog.Log 静态类:

using Serilog;

Log.Logger = new LoggerConfiguration()
    .CreateLogger();
Enter fullscreen mode Exit fullscreen mode

我们配置的日志记录器目前没有将日志记录到任何位置。要查看日志,我们需要配置日志接收器。让我们来看看什么是日志接收器。

Serilog水槽

Serilog 使用接收器(Sink)将事件记录到外部表示形式。配置 Serilog 时,我们必须指定所需的接收器,否则事件将不会被记录。Serilog 接收器通过 NuGet 分发。可用的接收器示例包括控制台接收器(Console sink),它将日志数据打印到控制台;以及文件接收器(File sink),它将日志事件写入文件。我们还可以通过命令行或 NuGet 包管理器将这些接收器添加到应用程序中。

dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
Enter fullscreen mode Exit fullscreen mode

图片描述
现在我们可以配置日志记录器,使其将数据写入所需的接收器:

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("log.txt",
        rollingInterval: RollingInterval.Day)
    .CreateLogger();
Enter fullscreen mode Exit fullscreen mode

`WriteTo.Console()` 指定将日志事件写入控制台。
要使用 `WriteTo.File()`,我们需要指定日志文件的位置。我们还可以添加一些其他参数,例如 `rollingInterval`。这里,我们指定每天创建一个新的日志文件。

最低水平

Serilog 提供六个日志级别:
详细 (Verbose ):这是日志信息最丰富的级别,会记录所有跟踪事件。生产环境中通常不启用此级别。
调试 (Debug ):此级别用于记录应用程序内部事件,这些事件不一定能从外部观察到。
信息 (Information ):此级别用于记录有关应用程序正常进程的信息。
警告 (Warning ):此级别用于记录有关应用程序正常行为之外的事件的警告。
错误 (Error):此级别用于记录应用程序中功能损坏的事件。此类事件需要立即处理。
致命 (Fatal ):这是最严重的级别。它用于记录可能导致应用程序崩溃的事件。致命事件也需要立即处理。

在配置日志记录器时,我们可以指定要捕获事件的最低级别。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.Console()
    .WriteTo.File("log.txt",
        rollingInterval: RollingInterval.Day,
        rollOnFileSizeLimit: true)
    .CreateLogger();
Enter fullscreen mode Exit fullscreen mode

如果未指定,Serilog 默认使用 Information 作为最低级别。

我们可以使用 Log 类中与事件级别匹配的方法来编写日志事件。例如,我们可以这样编写一个警告事件:

Log.Warning("Unable to load some services");
Enter fullscreen mode Exit fullscreen mode

在应用程序类中使用日志记录器

在应用程序类中使用日志记录器的最简单方法是通过全局 Log 类。例如:

[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{ 
    [HttpPost("test-logger")]
    public IActionResult TestLogger()
    {
        Log.Information("This log is from the global Log class");
        return Ok();
    }
}
Enter fullscreen mode Exit fullscreen mode

当我们运行应用程序并调用测试日志记录器端点时,会在控制台中看到以下内容:

图片描述

我们还可以通过将日志记录器作为 ILogger 注入到类中来使用它。首先,我们需要将 Serilog 配置为日志记录提供程序。为此,我们需要安装 Serilog.AspNetCore NuGet 包。

dotnet add package Serilog.AspNetCore
Enter fullscreen mode Exit fullscreen mode

图片描述
注意:Serilog.AspNetCore 依赖于 Serilog 和一些接收器。因此,安装 Serilog.AspNetCore 时,无需安装 Serilog、Serilog.Sinks.Console 和 Serilog.Sinks.File。

安装完该软件包后,我们可以在 program.cs 文件中对应用程序构建器的 Host 对象调用 UseSerilog() 函数,将 Serilog 配置为日志记录提供程序,并传入日志对象:

builder.Host.UseSerilog(Log.Logger);
Enter fullscreen mode Exit fullscreen mode

现在我们可以通过在构造函数中注入 ILogger 接口,在应用程序类中使用日志记录器:

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

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

    [HttpPost("test-logger")]
    public IActionResult TestLogger()
    {
        _logger.Information("This log is from the injected ILogger");
        return Ok();
    }
}
Enter fullscreen mode Exit fullscreen mode

当我们运行应用程序并调用测试日志记录器端点时,会在控制台中看到以下内容:

图片描述

将日志写入序列

Seq 是一个自托管的结构化日志搜索和分析服务器。事件以完全结构化的 JSON 数据形式捕获,Seq 可以轻松地使用各种参数进行搜索和筛选。与写入文件相比,这提供了一种更高效的日志访问和分析方式。Seq
可以安装在本地计算机或 Windows/Linux 服务器上。

在本地安装 Seq

您可以从https://datalust.co/download下载 Seq.msi ,并按照默认安装指南将其安装到您的本地计算机上。

图片描述

安装程序完成文件复制后,您可以选择启动 Seq 服务。这将打开 Seq 服务管理对话框,用于初始设置。系统会提示您提供存储 Seq 数据文件的位置以及托管 Seq 用户界面和 HTTP API 的 URL。您可以保留默认设置。您还可以选择设置管理员用户名和密码。
设置完成后,您可以通过访问默认 URL http://localhost:5341或您配置的 URL 来打开 Seq 用户界面。

图片描述

登录后即可访问序列用户界面。
图片描述

现在我们可以配置日志记录器以写入 Seq 了。为此,我们需要安装 Seq sink。

dotnet add package Serilog.Sinks.Seq
Enter fullscreen mode Exit fullscreen mode

图片描述

现在,我们可以在日志记录器配置中写入 Seq 并提供 Seq URL:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.Seq("http://localhost:5341")
    .CreateLogger();

Log.Information("Starting up application");
Enter fullscreen mode Exit fullscreen mode

让我们再次检查一下序列用户界面,看看我们的信息日志是否出现:
图片描述

结论

日志记录是我们应用程序的重要组成部分。它可以帮助节省排查生产问题的时间,并在监控过程中提供必要的信息。我们已经了解了如何将 Serilog 日志记录与功能强大的搜索和分析服务器(例如 Seq)结合使用。您可以在这里
获取本教程的示例代码

要了解更多关于 Serilog 的信息,您可以访问其GitHub 项目的文档。要了解更多关于 Seq 的信息,您可以访问其网站
上的文档

文章来源:https://dev.to/chinonsoike/logging-in-net-8-with-serilog-and-seq-34kn