Serilog for C# (.NET): 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Serilog 简介:它是什么以及为什么需要它



Serilog 是一个强大、灵活且现代的库,用于 .NET 生态系统(C#、F#、VB.NET)中的结构化日志记录。与传统的日志记录框架(例如 NLog 或 log4net)不同,后者处理的是纯文本消息,Serilog 从设计之初就旨在处理结构化数据。



为什么需要 Serilog?

  • 结构化日志记录:您记录的不仅仅是一个字符串,而是带有命名属性的对象。这使得在 Elasticsearch、Seq、Datadog 等系统中可以高效地过滤、搜索和分析日志。
  • 灵活性(Sinks):Serilog 使用“接收器”(sinks)的概念。您可以将日志发送到控制台、文件、数据库、云服务(Azure、AWS)、Elasticsearch、Telegram、Slack 以及数百个其他位置——只需连接相应的包即可。
  • 性能:Serilog 针对高负载应用程序进行了优化。它使用延迟字符串格式化(消息模板),以避免在日志记录级别未激活时产生不必要的内存分配。
  • 配置简单:通过代码或 JSON 文件进行配置。开始使用只需几行代码。
  • 诊断:允许轻松地将上下文信息(例如用户 ID、订单号、方法名称)添加到每条日志中。


安装 Serilog



Serilog 通过 NuGet(.NET 的包管理器)分发。可以通过包管理器控制台或 .NET CLI 进行安装。



通过 .NET CLI 安装(推荐):

dotnet add package Serilogdotnet add package Serilog.Sinks.Consoledotnet add package Serilog.Sinks.Filedotnet add package Serilog.Settings.Configurationdotnet add package Serilog.AspNetCore


通过包管理器控制台安装(Visual Studio):

Install-Package SerilogInstall-Package Serilog.Sinks.ConsoleInstall-Package Serilog.Sinks.FileInstall-Package Serilog.Settings.ConfigurationInstall-Package Serilog.AspNetCore


包说明:

  • Serilog — 库的核心。
  • Serilog.Sinks.Console — 用于输出到控制台的接收器。
  • Serilog.Sinks.File — 用于写入文件的接收器。
  • Serilog.Settings.Configuration — 允许从 appsettings.json 读取设置。
  • Serilog.AspNetCore — 与 ASP.NET Core 集成(将 HTTP 上下文添加到日志中)。


给 PythonLib 读者的说明: 在 Python 中,通过 pip 安装的类似命令是 pip install serilog(但 Serilog 是一个 .NET 库,Python 有自己的工具,例如 structlog)。



快速入门:30 秒内记录第一条日志



创建一个 .NET 控制台应用程序,并将以下代码添加到 Program.cs 中:



using Serilog;

// 1. 配置 SerilogLog.Logger = new LoggerConfiguration() .MinimumLevel.Debug() .WriteTo.Console() .WriteTo.File("logs/myapp.log", rollingInterval: RollingInterval.Day) .CreateLogger();

try{ Log.Information("应用程序已成功启动。");

int userId = 42; string userName = "Alice"; Log.Information("用户 {UserId}(用户名 {UserName})已登录。", userId, userName);

// 错误示例 try { throw new InvalidOperationException("无效操作"); } catch (Exception ex) { Log.Error(ex, "为用户 {UserId} 执行操作时发生错误", userId); }

Log.Warning("这是一个警告。级别:{Leve

推荐