admin管理员组文章数量:1446760
Serilog: 功能强大的 .NET 日志库,快速上手与进阶
Serilog 是一个功能强大的 .NET 日志库,以其简洁的配置和灵活的输出方式而受到开发者喜爱。支持多种日志输出目标(如控制台、文件、数据库等),并且可以通过结构化日志的方式记录丰富的上下文信息,便于后续的日志分析和调试。Serilog 还提供了丰富的扩展包,能够轻松集成到各种 .NET 应用程序中,帮助开发者高效地管理和记录日志。
1. 安装
第一步,老规矩,安装 NuGet 包。
代码语言:javascript代码运行次数:0运行复制# 核心库
dotnet add package Serilog
# 控制台输出(可选)
dotnet add package Serilog.Sinks.Console
# 文件输出(可选)
dotnet add package Serilog.Sinks.File
# Elasticsearch 输出(可选)
dotnet add package Serilog.Sinks.Elasticsearch
# Seq 输出(可选)
dotnet add package Serilog.Sinks.Seq
2. 配置
Serilog 的配置可以通过代码或配置文件完成。
2.1 通过代码配置
在 Program.cs
文件中配置 Serilog:
using Serilog;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug() // 设置最低日志级别为 Debug
.WriteTo.Console() // 输出到控制台
.WriteTo.File("logs/myapp.txt", rollingInterval: RollingInterval.Day) // 输出到文件,按天分割
.CreateLogger();
Log.Information("Serilog 已配置完成。");
2.2 通过配置文件配置
在 appsettings.json
文件中配置 Serilog:
{
"Serilog":{
"MinimumLevel":"Debug",
"WriteTo":[
{"Name":"Console"},
{
"Name":"File",
"Args":{
"path":"logs/myapp.txt",
"rollingInterval":"Day"
}
}
],
"Overrides":{
"Microsoft":"Warning",
"System":"Error"
}
}
}
在 Program.cs
中加载配置文件:
using Serilog;
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
Log.Information("Serilog 已配置完成。");
3. 使用 Serilog 记录日志
配置完成后,可以在代码中使用 Serilog 记录不同级别的日志:
代码语言:javascript代码运行次数:0运行复制Log.Information("这是一条信息日志。");
Log.Warning("这是一条警告日志。");
Log.Error("这是一条错误日志。");
Log.Debug("这是一条调试日志。");
Log.Fatal("这是一条致命错误日志。");
Serilog 支持结构化日志,可以通过键值对的形式记录上下文信息:
代码语言:javascript代码运行次数:0运行复制var userId = 123;
Log.Information("用户 {UserId} 已登录", userId);
4. 高级功能
4.1 日志扩展
通过日志扩展,可以在日志中自动添加额外信息,例如机器名、线程 ID 等:
需要额外的扩展包:
代码语言:javascript代码运行次数:0运行复制Install-Package Serilog.Enrichers.Thread Install-Package Serilog.Enrichers.Environment
Log.Logger = new LoggerConfiguration()
.Enrich.WithMachineName()
.Enrich.WithThreadId()
.WriteTo.Console()
.CreateLogger();
还可以自定义富集器,添加应用程序版本信息:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.Enrich.WithProperty("ApplicationVersion", typeof(Program).Assembly.GetName().Version.ToString())
.WriteTo.Console()
.CreateLogger();
4.2 动态日志级别
根据需要动态调整日志级别:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
//对于来自“Microsoft”命名空间的日志,只记录 Warning 及以上级别的日志
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
//对于来自“System”命名空间的日志,只记录 Error 及以上级别的日志
.MinimumLevel.Override("System", LogEventLevel.Error)
.WriteTo.Console()
.CreateLogger();
4.3 异常捕获和上下文信息
Serilog 可以捕获异常并记录详细的堆栈信息:
代码语言:javascript代码运行次数:0运行复制try
{
// 模拟一个异常
throw new InvalidOperationException("这是一个测试异常");
}
catch (Exception ex)
{
Log.Error(ex, "发生了一个异常");
}
也可以在日志中包含更多的上下文信息:
代码语言:javascript代码运行次数:0运行复制using (LogContext.PushProperty("OperationId", Guid.NewGuid()))
{
Log.Information("操作开始");
// 执行一些操作
Log.Information("操作结束");
}
5. 最佳实践:集成 Seq 或 Elasticsearch
- • 使用结构化日志:尽量使用结构化日志记录上下文信息。
- • 合理设置日志级别:避免在生产环境中记录过多的调试信息。
- • 定期清理日志:使用文件滚动机制,防止日志文件过大。
- • 集中管理日志:将日志集中到日志管理工具(如 Seq、Elasticsearch)。
5.1 集成 Seq
Seq 是一个强大的日志服务器,可以集中管理和可视化日志数据。要集成 Seq,首先需要安装 Serilog.Sinks.Seq
包:
dotnet add package Serilog.Sinks.Seq
然后在配置中添加 Seq 输出:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.WriteTo.Seq("http://seq-server-url")
.CreateLogger();
5.2 集成 Elasticsearch
安装 Serilog.Sinks.Elasticsearch
包:
dotnet add package Serilog.Sinks.Elasticsearch
然后在配置中添加 Elasticsearch 输出:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("http://lasticsearch-url"))
{
AutoRegisterTemplate = true,
IndexFormat = "myapp-{0:yyyy.MM.dd}"
})
.CreateLogger();
6. 进阶技巧
6.1 日志过滤
可以根据条件过滤日志,例如只记录特定源的日志:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.Filter.ByIncludingOnly(Matching.FromSource("MyApp"))
.WriteTo.Console()
.CreateLogger();
6.2 自定义日志格式
Serilog 允许自定义日志输出格式。例如,使用 JSON 格式输出日志:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] {Message:lj}{NewLine}{Exception}")
.WriteTo.File(new JsonFormatter(), "logs/myapp.json")
.CreateLogger();
6.3 分布式追踪
Serilog 可以与分布式追踪系统(如 Jaeger、Zipkin)集成,帮助跟踪跨服务的请求。例如,使用 OpenTelemetry:
代码语言:javascript代码运行次数:0运行复制dotnet add package OpenTelemetry.Exporter.Jaeger
dotnet add package Serilog.Enrichers.OpenTelemetry
然后在配置中启用追踪:
代码语言:javascript代码运行次数:0运行复制Log.Logger = new LoggerConfiguration()
.Enrich.WithTraceId()
.Enrich.WithSpanId()
.WriteTo.Console()
.CreateLogger();
7. 总结
Serilog 是一个功能强大且灵活的日志记录库,适用于 .NET 应用程序。通过合理配置和使用不同的日志级别,可以更好地监控应用程序的运行状态,快速定位和解决问题。此外,结合高级功能和最佳实践,可以进一步提升日志记录的效果和效率。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-03-13,如有侵权请联系 cloudcommunity@tencent 删除异常serilog开发者配置日志本文标签: Serilog 功能强大的 NET 日志库快速上手与进阶
版权声明:本文标题:Serilog: 功能强大的 .NET 日志库,快速上手与进阶 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748288001a2838687.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论