如何使用 Serilog 在 .NET 中进行结构化日志记录?

星降
发布: 2025-10-16 13:44:02
原创
647人浏览过
Serilog是.NET中流行的结构化日志库,通过NuGet安装核心包和Sink后,配置Log.Logger实现控制台和文件输出;使用命名占位符记录上下文信息,支持ASP.NET Core集成,结合Seq或ELK提升日志分析效率。

如何使用 serilog 在 .net 中进行结构化日志记录?

Serilog 是 .NET 中非常流行的结构化日志库,它能将日志记录为带有属性的结构化数据(如 JSON),便于后续搜索、分析和集中管理。与传统文本日志不同,结构化日志保留了上下文信息,适合集成到 ELK、Seq、Application Insights 等系统。

安装 Serilog 包

在项目中使用 Serilog,先通过 NuGet 安装核心包和所需的接收器(Sink):

  • Serilog:核心库
  • Serilog.Sinks.Console:输出到控制台
  • Serilog.Sinks.File:输出到文件
  • Serilog.Sinks.Seq(可选):发送到 Seq 服务

可通过 Package Manager 或 CLI 安装:

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

配置全局日志记录器

在程序启动时配置 Log.Logger,通常在 Program.csMain 方法中完成:

using Serilog; Log.Logger = new LoggerConfiguration() .WriteTo.Console() .WriteTo.File("logs/log.txt", rollingInterval: RollingInterval.Day) .CreateLogger(); // 使用后记得刷新并关闭 try { // 启动应用逻辑 } finally { Log.CloseAndFlush(); }

这样所有日志会同时输出到控制台和按天滚动的日志文件中。

在代码中使用结构化日志

通过 Log.InformationLog.WarningLog.Error 等方法写入日志。Serilog 会自动提取占位符中的属性值:

如知AI笔记
如知AI笔记

如知笔记——支持markdown的在线笔记,支持ai智能写作、AI搜索,支持DeepseekR1满血大模型

如知AI笔记27
查看详情 如知AI笔记
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

在 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 _logger; public HomeController(ILogger logger) { _logger = logger; } public IActionResult Index() { _logger.LogInformation("访问首页,用户IP: {UserIp}", HttpContext.Connection.RemoteIpAddress); return View(); }

基本上就这些。Serilog 的强大在于结构化输出和丰富的 Sink 支持,搭配 Seq 或 Elasticsearch 能极大提升排查效率。关键是用好命名占位符,避免拼接字符串日志。不复杂但容易忽略。

以上就是如何使用 Serilog 在 .NET 中进行结构化日志记录?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号