Serilog是.NET中流行的结构化日志库,通过NuGet安装核心包和Sink后,配置Log.Logger实现控制台和文件输出;使用命名占位符记录上下文信息,支持ASP.NET Core集成,结合Seq或ELK提升日志分析效率。
Serilog 是 .NET 中非常流行的结构化日志库,它能将日志记录为带有属性的结构化数据(如 JSON),便于后续搜索、分析和集中管理。与传统文本日志不同,结构化日志保留了上下文信息,适合集成到 ELK、Seq、Application Insights 等系统。
在项目中使用 Serilog,先通过 NuGet 安装核心包和所需的接收器(Sink):
可通过 Package Manager 或 CLI 安装:
dotnet add package Serilog dotnet add package Serilog.Sinks.Console dotnet add package Serilog.Sinks.File在程序启动时配置 Log.Logger,通常在 Program.cs 或 Main 方法中完成:
using Serilog; Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); // 使用后记得刷新并关闭 try { // 启动应用逻辑 } finally { Log.CloseAndFlush(); }这样所有日志会同时输出到控制台和按天滚动的日志文件中。
通过 Log.Information、Log.Warning、Log.Error 等方法写入日志。Serilog 会自动提取占位符中的属性值:
var userId = 123; var action = "Login"; Log.Information("用户 {UserId} 执行了 {Action}", userId, action);输出可能是:
{"Timestamp":"2025-04-05T10:00:00Z","Level":"Information","MessageTemplate":"用户 {UserId} 执行了 {Action}","Properties":{"UserId":123,"Action":"Login"}}注意:{UserId} 和 {Action} 成为结构化字段,可在日志平台中直接查询 UserId=123。
在 ASP.NET Core 项目中,替换默认日志提供者:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSerilog((context, services, configuration) => configuration .WriteTo.Console() .WriteTo.File("logs/app-.txt", rollingInterval: RollingInterval.Day) .Enrich.FromLogContext() // 添加上下文信息,如请求 ID .ReadFrom.Services(services)) // 读取配置 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup之后可以在控制器或服务中注入 ILogger<T>,依然享受结构化能力:
private readonly ILogger基本上就这些。Serilog 的强大在于结构化输出和丰富的 Sink 支持,搭配 Seq 或 Elasticsearch 能极大提升排查效率。关键是用好命名占位符,避免拼接字符串日志。不复杂但容易忽略。
以上就是如何使用 Serilog 在 .NET 中进行结构化日志记录?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号