Serilog是.NET中流行的结构化日志库,通过NuGet安装核心包和Sink后,配置Log.Logger实现控制台和文件输出;使用命名占位符记录上下文信息,支持ASP.NET Core集成,结合Seq或ELK提升日志分析效率。

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.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 会自动提取占位符中的属性值:
漂亮的企业网站。NET2.0出来了, 本次升级修改如下: 1、优化了3层结构。 2、优化了后台管理代码,增强了安全性能。 3、增加了系统名称及关键字管理。 4、增加了系统错误日志记录,自动生成Systemlog.log日志文件。 备注:本系统采用ASP.NET 2.O+ACCESS开发,请调试的朋友安装.NET2.0运行环境! 网站内容 网站栏目包括 首页|企业简介|新闻中心|产品展示|公司展示|
输出可能是:
{"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
基本上就这些。Serilog 的强大在于结构化输出和丰富的 Sink 支持,搭配 Seq 或 Elasticsearch 能极大提升排查效率。关键是用好命名占位符,避免拼接字符串日志。不复杂但容易忽略。









