1. Serilog 简介
Serilog 是 .NET 生态中强大且灵活的日志库,支持结构化日志记录,并提供多种日志接收器(Sinks),可以将日志输出到控制台、文件、数据库等不同存储介质。Serilog 适用于控制台应用、ASP.NET Core 项目以及各种 .NET 应用程序。
2. 安装 Serilog
在 .NET 项目中,可以通过 NuGet 安装 Serilog 及相关扩展包:
dotnet add package Serilog
dotnet add package Serilog.Sinks.Console
dotnet add package Serilog.Sinks.File
dotnet add package Serilog.AspNetCore
3. 在控制台应用中使用 Serilog
在 Program.cs 中配置并使用 Serilog:
using Serilog;
class Program
{
static void Main()
{
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
Log.Information("Hello, Serilog!");
Log.Warning("This is a warning message.");
Log.Error("An error occurred.");
Log.CloseAndFlush();
}
}
此配置将日志输出到控制台,并将日志文件按天存储在 logs 目录下。
4. 在 ASP.NET Core 中使用 Serilog
在 Program.cs 中配置 Serilog 作为默认日志提供程序:
using Serilog;
var builder = WebApplication.CreateBuilder(args);
// 配置 Serilog
Log.Logger = new LoggerConfiguration()
.WriteTo.Console()
.WriteTo.File("logs/webapp-.txt", rollingInterval: RollingInterval.Day)
.CreateLogger();
builder.Host.UseSerilog();
var app = builder.Build();
app.MapGet("/", () => "Hello Serilog in ASP.NET Core!");
app.Run();
在 ASP.NET Core 中,Serilog 作为全局日志提供程序,可以自动替换默认的 ILogger。
5. 使用结构化日志
Serilog 支持结构化日志,可使用 {} 传递参数,提高日志的可读性和可查询性:
Log.Information("User {UserId} logged in at {Time}", 123, DateTime.UtcNow);
这比字符串拼接更高效,并且在日志系统(如 Elasticsearch)中可以轻松查询特定字段的数据。
6. 使用不同的日志接收器(Sinks)
Serilog 提供多种日志存储方式,例如:
控制台(Serilog.Sinks.Console) 文件(Serilog.Sinks.File) 数据库(Serilog.Sinks.MSSqlServer) Elasticsearch(Serilog.Sinks.Elasticsearch)例如,将日志发送到 Elasticsearch:
dotnet add package Serilog.Sinks.Elasticsearch
Log.Logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new Serilog.Sinks.Elasticsearch.ElasticsearchSinkOptions(new Uri("http://localhost:9200")))
.CreateLogger();
这样日志数据就可以存入 Elasticsearch,并在 Kibana 等工具中进行分析。
Serilog 是 .NET 生态中最流行的日志库之一,它支持结构化日志、丰富的日志存储选项,并能与 ASP.NET Core 无缝集成。无论是控制台应用还是 Web 应用,使用 Serilog 都能显著提升日志管理能力。