Serilog 全面指南:从入门到实战,打造高效 .NET 日志系统

Serilog 是一个功能强大的 .NET 日志库,支持结构化日志记录,适用于控制台、文件、数据库等多种存储方式。以下是 Serilog 的基本使用方法:


1. 安装 Serilog

在 .NET Core 或 .NET 7/8 项目中,使用 NuGet 安装 Serilog 及相关 Sink(日志存储目标)。

dotnet add package Serilog
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File

如果要用于 ASP.NET Core,还需要安装 Serilog.AspNetCore

dotnet add package Serilog.AspNetCore

2. 在 Console 应用程序中使用 Serilog

Program.cs 进行 Serilog 配置并写入日志:

using Serilog;

class Program
{
    static void Main(string[] args)
    {
        // 配置 Serilog
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()  // 设置日志级别
            .WriteTo.Console()      // 输出到控制台
            .WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // 按天滚动日志
            .CreateLogger();

        Log.Information("应用程序启动");
        Log.Warning("这是一个警告信息");
        Log.Error("发生错误: {ErrorCode}", 404);

        Log.CloseAndFlush(); // 关闭日志
    }
}

日志输出示例

[10:30:45 INF] 应用程序启动
[10:30:46 WRN] 这是一个警告信息
[10:30:47 ERR] 发生错误: 404

3. 在 ASP.NET Core 中使用 Serilog

(1)修改 Program.cs

在 ASP.NET Core 中集成 Serilog,可以替代默认的 ILogger,修改 Program.cs

using Serilog;

var builder = WebApplication.CreateBuilder(args);

// 配置 Serilog
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.Console()
    .WriteTo.File("logs/webapp.txt", rollingInterval: RollingInterval.Day)
    .CreateLogger();

builder.Host.UseSerilog();  // 替换默认日志

var app = builder.Build();

app.UseSerilogRequestLogging(); // 记录 HTTP 请求

app.MapGet("/", () =>
{
    Log.Information("访问首页");
    return "Hello, Serilog!";
});

app.Run();

(2)日志文件示例

[10:35:00 INF] HTTP GET / responded 200 in 10.3 ms
[10:35:02 INF] 访问首页

4. 结构化日志

Serilog 支持结构化日志,可以使用 占位符 {} 记录参数信息,而不是简单字符串拼接。

int userId = 123;
string action = "Login";
Log.Information("用户 {UserId} 执行了 {Action} 操作", userId, action);

日志输出:

[10:40:00 INF] 用户 123 执行了 Login 操作

这样可以让日志系统更容易解析,而不是单纯的文本格式。


5. 使用 JSON 配置 Serilog

可以使用 appsettings.json 进行配置,首先安装依赖包:

dotnet add package Serilog.Settings.Configuration
dotnet add package Microsoft.Extensions.Configuration.Json

然后,在 appsettings.json 添加 Serilog 配置:

{
  "Serilog": {
    "MinimumLevel": "Debug",
    "WriteTo": [
      { "Name": "Console" },
      { "Name": "File", "Args": { "path": "logs/log.json", "rollingInterval": "Day" } }
    ],
    "Enrich": ["FromLogContext", "WithMachineName"]
  }
}

然后在 Program.cs 中加载配置:

using Microsoft.Extensions.Configuration;
using Serilog;

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(config)
    .CreateLogger();

6. 输出到 Elasticsearch 或数据库

Serilog 还支持输出到 Elasticsearch、SQL Server、MongoDB 等数据库。例如,使用 Elasticsearch:

dotnet add package Serilog.Sinks.Elasticsearch

然后配置 LoggerConfiguration

.WriteTo.Elasticsearch(new Serilog.Sinks.Elasticsearch.ElasticsearchSinkOptions(new Uri("http://localhost:9200"))
{
    AutoRegisterTemplate = true
})

7. 使用 ILogger 注入

在 ASP.NET Core 中,可以通过 ILogger<T> 进行依赖注入:

using Microsoft.Extensions.Logging;

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

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

    public void DoWork()
    {
        _logger.LogInformation("MyService is working.");
    }
}

Program.cs 中注册服务:

builder.Services.AddSingleton<MyService>();

然后在控制器或服务中使用:

var service = app.Services.GetRequiredService<MyService>();
service.DoWork();

总结

  1. 安装 Serilog,可以用于 Console、File、Elasticsearch 等多种 Sink。
  2. 控制台应用中使用 Log.Logger 进行日志记录。
  3. ASP.NET Core 使用 Serilog 替换默认日志系统,并可使用 JSON 进行配置。
  4. 支持结构化日志,使用 {} 占位符格式化日志。
  5. 支持日志持久化到数据库(如 Elasticsearch、SQL Server 等)
  6. 可通过 ILogger<T> 进行依赖注入,更符合 ASP.NET Core 规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码上有潜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值