Serilog事件

Serilog介绍 其中包Serilog是Log核心库,Serilog.Sinks.Console是Log的控制台输出库,这个也是日志框架的一贯策略,一个核心库加多个输出库组合使用,这样可以保持良好的扩展性。//日志等级由低到高(等级越低输出的日志信息越详细):Verbose->Debug->Information->Warning->Error->Fatal。ILogger对象用于记录日志,和其他日志框架差不多。Serilog日志级别由低到高 阅读详情
AI摘要

本文系统介绍Serilog在.NET生态中的核心优势:结构化日志记录(支持属性绑定与JSON输出)、丰富Sink生态系统(Console/File/Seq/Elasticsearch等)、简洁静态API、异步日志能力(通过Serilog.Sinks.Async实现)、多源配置方式(代码/JSON/环境变量)、日志丰富(Enrichment)与对象解构(Destructuring)。重点强调其在微服务、云原生及高并发场景下的可观测性价值。

部署运行你感兴趣的模型镜像一键部署
〇、前言
相较于 log4net,Serilog 则是新项目的首选,现代化、高性能、易用,是 .NET 日志的未来方向。如需了解 log4net 详见往期博文:https://www.cnblogs.com/hnzhengfy/p/19121607/log4net。

log4net 虽然是一个广泛使用的、功能强大的日志记录库,而且专为 .NET 平台设计,但由于她是较老的日志框架,其生态在 .NET Core/.NET 5+ 环境中支持有限,因此还是要慎重考虑。

方面 log4net Serilog
日志模型 文本日志:日志是纯字符串,信息混在一起。
例如:“用户 alice 从 192.168.1.1 登录” 结构化日志:日志是带属性的数据事件。
例如:“用户 {UserName} 从 {IP} 登录”,UserName=“alice”, IP=“192.168.1.1”
配置方式 主要靠 XML 文件,复杂且不易读。 支持代码和 appsettings.json,更现代、简洁。
API 使用 需为每个类创建 logger 实例,较繁琐。 提供静态 Log 类,一行代码即可记录,更简单。
生态系统 老牌库,Appenders 丰富但更新慢。 Sinks 生态活跃,原生支持 Elasticsearch、Seq、云平台等。
.NET 集成 在 ASP.NET Core 中集成较麻烦。 与 ASP.NET Core 深度集成,自动记录请求上下文。
维护状态 活跃维护,持续更新,最新版 3.2.0(20250823)。 活跃维护,持续更新,支持最新 .NET 版本。
经过对比,当然还是 Serilog 更有优势,那么本文将就概念方面来详细介绍下,后续会继续更新相关用法实践,有兴趣可持续关注。

回到顶部

一、Serilog 简介
Serilog 是一个为 .NET 应用程序设计的强大的诊断日志库,以易于设置、简洁的 API 和跨所有最新 .NET 平台的兼容性而著称。

它是 .NET 平台中非常流行且强大的结构化日志库,其最大特点是结构化日志记录(Structured Logging)。

1.1 核心特点:结构化日志记录(Structured Logging)
日志不是简单的字符串,而是包含命名属性的结构化事件。

// 例如记录用户登录事件
string username = “bob”;
string clientIp = “10.0.0.5”;
int userId = 789;
Log.Information(“用户 {UserName} (ID: {UserId}) 从 {ClientIP} 登录”,
username, userId, clientIp);
// 生成的结构化数据(以 JSON 形式表示):
{
“Timestamp”: “2025-03-28T14:30:00Z”,
“Level”: “Information”,
“MessageTemplate”: “用户 {UserName} (ID: {UserId}) 从 {ClientIP} 登录”,
“RenderedMessage”: “用户 bob (ID: 789) 从 10.0.0.5 登录”,
“Properties”: {
“UserName”: “bob”,
“UserId”: 789,
“ClientIP”: “10.0.0.5”
}
}
// 可以直接在 Seq 或 Elasticsearch 中搜索,例如:UserName = ‘bob’
这样便于和另外的日志接收系统对接,针对日志量较大的场景比较友好。

1.2 核心特点:强大的 Sink 生态系统
Serilog 通过 Sinks(接收器)将日志事件发送到各种目的地。这种“即插即用”的架构是 Serilog 强大和流行的关键。

官方 Sinks:Serilog.Sinks.Console(控制台)、Serilog.Sinks.File(文件)、Serilog.Sinks.Seq(Seq 服务器)、Serilog.Sinks.Elasticsearch(Elasticsearch)等。

第三方 Sinks:支持 Splunk、DataDog、Graylog、Kafka、RabbitMQ、AWS CloudWatch 等

优势:可以同时配置多个 Sinks,将同一日志事件发送到不同地方。

工作原理:

日志事件生成:业务端代码调用 Log.Information(“…”),Serilog 创建一个 LogEvent 对象。
事件处理:该事件可能经过过滤、丰富(Enrichment)等处理。
分发到 Sinks:Serilog 核心引擎将处理后的 LogEvent 分发给所有配置的 Sinks。
Sink 执行写入:每个 Sink 根据自己的逻辑,将 LogEvent 转换为适合目标系统的格式(如 JSON、文本行),并通过相应协议(如 HTTP、文件 I/O)发送出去。

1.3 核心特点:简洁易用的 API
使用静态 Log 类,无需依赖注入即可在任何地方记录日志。

它极大地简化了日志记录的开发体验,让开发者能够以最少的代码、最直观的方式完成强大的日志功能。

// Serilog:全局静态 Log 类,任何地方直接调用
Log.[Level](string messageTemplate, params object[] propertyValues); // 格式
Log.Verbose(“调试信息: {Detail}”, detail); // 示例
Log.Debug(“进入方法: {MethodName}”, “ProcessOrder”);
Log.Information(“订单 {OrderId} 已创建”, orderId);
Log.Warning(“库存不足,商品 {ProductId}”, productId);
Log.Error(exception, “处理支付失败,用户 {UserId}”, userId);
Log.Fatal(“应用程序即将退出”);
// 对比传统日志库 log4net 的方式:
// 每个类都需要声明一个 logger 实例,代码重复,不够优雅
private static readonly ILog log = LogManager.GetLogger(typeof(MyClass));
public void DoSomething()
{
log.Info(“用户登录”);
}
支持所有标准日志级别:Verbose,Debug,Information,Warning,Error,Fatal。

使用 {PropertyName} 占位符,清晰表达意图。
自动提取属性值,生成结构化数据。
支持格式化说明符,如 {LoginTime:HH:mm}。
即使没有提供参数,也不会抛出异常(会原样输出占位符)。

// 异常处理的优雅支持
// 记录异常是常见需求,Serilog 提供了专门的重载,让异常日志既简洁又完整
try
{
// …
}
catch (Exception ex)
{
Log.Error(ex, “处理订单 {OrderId} 失败”, orderId);
}
// 第一个参数是 Exception 对象,Serilog 会自动捕获堆栈跟踪。
// 后续参数用于填充消息模板中的属性。
// 生成的日志事件同时包含异常详情和业务上下文。
特性 如何体现“简洁易用”
静态 Log 类 全局可用,无需实例化,减少样板代码
统一方法签名 所有日志级别使用相同模式,降低记忆负担
消息模板 结构化日志 + 直观语法,代码可读性强
异常支持 一行代码

C#-使用Serilog框架快速实现日志及其相关扩展 集合改变触发事件,更改附加属性AutoScroll值,值更改触发CallBack将日志滚动到底部;将该接口实现类实例化对象通过WriteTo.Sink(myEventSink)与Logger绑定。继承ILogEventSink接口实现 Emit:当Sink器接收到新日志时触发。:添加监听对象Trace.Listeners.Add(this);Console接收器(安装。两事件的响应原因:查看日志时,防止日志自动滚动到底部;File接收器(安装。通过该接口将接收器接收的日志添加进内部日志集合。 阅读详情

相关推荐

Serilog日志框架

Serilog是 .NET应用程序的诊断日志记录库。它易于设置,具有干净的 API,并且可以在所有最新的 .NET 平台上运行。虽然它即使在最简单的应用程序中也很有用,但 Serilog 对结构化日志记录的支持在检测复杂、分布式和异步应用程序和系统时大放异彩。

布史之铭 1810

WPF/C#如何使用Serilog 错误日志

首先在Nuget搜索Serilog,如果简单的输出安装如下两个即可(别的我也没研究,就是简单的输出日志) 其次就是配置,在App.cs文件Startup事件中添加如下代码: Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.File("logs//Log.txt",//文件保存路径 outputTemplate: "[{Times

Delevy的博客 3143

三、日志工具 SeriLog

帖子优先: https://blog.youkuaiyun.com/Upgrader/article/details/88323907 https://www.cnblogs.com/cgzl/p/7616906.html 看完开干 引入nuget包: 1)Serilog 2)Serilog.Sinks.File 3)AutofacSerilogIntegration 极简主义,我们不引...

heidaichongzi的博客 2349

最新Serilog源码解析——使用方法(1),Java全套视频

另外,全局的过滤条件也可以很复杂,甚至我们可以将之前的 Enricher 结合在一起,比如说,在原先带有用户名的 Enricher 中,我们希望只记录用户名为 Lily 的日志,其他用户名都不记录。这看起来似乎挺反直觉的,数据是重要的,不应该隐式地丢弃某些数据,但是,在实际应用中这样的需求确实是合理的,有时候我们仅希望记录最为重要的日志而不是全部的日志信息。上图显示的是 Serilog 向控制台中记录的日志信息,可以看到,其最终记录的日志信息和 LogDemo 差不多,均是日志时间+等级+消息。

2401_84558388的博客 963

Serilog源码解析——使用方法

在上两篇文章(链接1和链接2)中,我们通过一个简易 demo 了解到了一个简单的日志记录类库所需要的功能,即一条日志有哪些数据,以及如何通过一次记录的方式将同一条日志消息记录到多个日志媒介中。在本文中,针对 Serilog,我们从以下几个方面来了解 Serilog 核心功能需求和用法,并为下一篇正式开始探究源码准备相关工作。(系列目录) Serilog 核心功能# 目前,在 Asp.net core 中,对于日志记录库,除了微软官方准备的 Microsoft.Extensions.Logging 外,S

Java6888的博客 927

.NET结构化日志实战:从字符串拼接到Serilog工程落地

在软件开发中,日志记录是观测系统运行状态、定位线上故障的核心手段。传统文本日志通过字符串拼接记录信息,导致检索困难、上下文缺失,尤其在分布式环境下难以串联请求链路。结构化日志将日志视为带属性的对象,以键值对形式存储,使日志平台能够按字段索引、过滤与聚合,大幅提升排障效率。Serilog作为.NET生态中成熟的结构化日志框架,提供了灵活的Sink、Enricher和LogContext机制,支持文件滚动、异步写入、请求链路追踪及敏感数据脱敏。通过合理配置日志级别与输出目标,开发者可低成本接入现有ASP.NET

weixin_29258297的博客 331

ADO.NET数据监控平台搭建指南

摘要 本文提供了一套完整的ADO.NET数据监控平台搭建指南,涵盖环境配置、数据采集、可视化展示及问题排查。 核心步骤 环境准备:部署SQL Server(启用XEvents)、InfluxDB(存储)、Grafana(可视化)及JMeter(压力测试) 监控配置:启用ADO.NET内置跟踪(app.config日志)、集成SQL Server XEvents捕获查询性能 数据采集:通过Serilog将日志写入InfluxDB,结合JMeter生成负载数据 可视化:通过Grafana展示SQL执行时长、连接

java专栏 1015

Serilog初识(一)————分别Console、Web程序简单使用Serilog

Serilog简介 Serilog是.NET应用程序的诊断日志库。它易于设置,具有干净的API,并可在所有最新的.NET平台上运行。虽然它在最简单的应用程序中也很有用,但Serilog对结构化日志记录的支持在处理复杂,分布式和异步应用程序和系统时仍然很有用。——GithubSerilog的介绍 通过Console使用Serilog 使用Serilog之前先得在NuGet下载几个包,在NuGet控...

MDZZ666的博客 4648

C# Serilog配置和使用

3.Form中使用Serilog。1.安装NuGet安装。

u010054389的博客 1529

SqlSugar搭配ABP框架实战:如何配置AOP日志,把SQL输出到控制台和文件(含性能监控)

本文详细介绍了如何在ABP框架中集成SqlSugar ORM,并通过AOP技术配置SQL日志输出到控制台和文件,实现全面的SQL性能监控。文章涵盖环境准备、AOP日志核心配置、高级日志策略与性能优化,以及实战案例与疑难解答,帮助开发者提升调试效率和系统性能。

weixin_33698823的博客 478

C#日志库四(Serilog、Log4net、NLog对比)

本文对比了三种.NET日志框架(Serilog、log4net、NLog)的核心特性。Serilog擅长结构化日志记录,log4net以灵活性著称,NLog则兼具两者优点。性能测试显示三者表现接近,但社区支持各有差异。选择时应考虑日志内容形式、生态支持、技术栈兼容性及性能需求。文章最后预告了下期log4net实战教程,并提供作者技术专栏推荐。通过特性对比表清晰呈现各框架差异,为开发者选型提供了实用参考。

欢迎来到RaymondLeigh的知识共享基地 1938

C#主流日志库深度对比:NLog、log4net与Serilog如何选择?

通过本文的深度对比可见,Serilog凭借现代化的设计理念在性能与功能上全面领先,而NLog在传统企业级场景仍具优势。建议新项目优先选择Serilog,老系统逐步迁移替换log4net。你的项目用哪个日志库?欢迎评论区交流实战经验!

bengg123的博客 3167

C# 日志框架 NLog、log4net 和 Serilog对比

NLog、log4net 和 Serilog 是三个非常流行的 .NET 日志框架,它们各自有独特的优点和缺点。NLog:如果你需要一个功能丰富、性能优秀的日志框架,并且不介意稍微复杂的配置,NLog 是一个非常好的选择。log4net:如果你的项目已经使用了 log4net,或者你需要一个简单易用且广泛支持的日志框架,log4net 是一个不错的选择。Serilog:如果你需要一个现代、高性能且支持结构化日志记录的框架,Serilog 是一个很好的选择。

电子第一课,点亮LED;第二课,点亮钽电容;第三课,点亮MOS管 2254

.NET 9使用Serilog

核心逻辑:通过作用域隔离日志,保证在同一个业务逻辑产生的日志,结束时批量提交并排序。优势:避免穿插、保证顺序、减少 I/O 开销.Build();.ReadFrom.Configuration(config) // 需安装 Serilog.Settings.Configuration// 输出i < 6;i++)// 业务逻辑段DateTimeNow,步骤1开始");// ... 业务代码 ...DateTimeNow,步骤1遇到警告");// ... 业务代码 ...

build2024 866

向量乘法器设计

同样基于Wallace树乘法器,我们来构造向量乘法器。 在一些矩阵运算中经常用到向量的相乘运算,本例以4维向量为例子介绍向量乘法器的verilog HDL设计。 设向量a = (a1, a2, a3, a4), b = (b1, b2, b3, b4)。 则a 与 b的点乘为:a * b = a1 b1 + a2 b2 + a3 b3 + a4 b4, 即向量对应位置的值相乘,再相加...

Reborn Lee 2967

Windows平台无人机仿真:从零搭建SITL环境与QGC联调

本文详细指导了在Windows平台上从零搭建无人机软件在环(SITL)仿真环境,并与QGroundControl(QGC)进行联调的完整流程。通过使用Cygwin工具链,开发者可以在没有实体硬件的情况下,模拟运行ArduPilot飞控,并通过MAVLink协议连接QGC地面站进行全功能测试,为无人机软件开发提供了一个安全、经济的虚拟沙盒环境。

weixin_29239279的博客 407

《联邦学习实战》杨强 读书笔记十四——构建公平的大数据交易市场

当数据具有资产属性之后,数据便可以直接或者间接地为公司、为社会创造价值和收益,并且可以作为一种特殊的商品在市场中进行交易。 与传统的商品交易相比,数据资产交易的市场前景更广阔,但同时也面临着很多的挑战,主要包括: 数据的质量、价格如何定义 在合法合规的前提下,数据的交易如何确保不会泄露用户的隐私 如何构建合理的激励机制来鼓励更多的参与方加入数据交易市场中 大数据交易 数据交易的定义 数据交易是指一种对数据进行买卖的行为,大数据交易由三方共同参与,分别为数据提供方、大数据交易平台和数据需求方:

IEEE802_11的博客 3432

别再为调试发愁!STM32CubeMX+FreeRTOS下,串口printf打印的保姆级配置指南(基于STM32F429)

本文详细介绍了在STM32CubeMX和FreeRTOS环境下实现稳定串口printf打印的配置方法。通过硬件选型、基础配置、线程安全的重定向实现以及高级调试技巧,帮助开发者解决多任务环境下的串口输出问题,提升调试效率。特别适用于STM32F429开发板用户。

weixin_42527401的博客 272

自动驾驶关键技术(一):时间敏感网络TSN

时间敏感网络TSN的基本概念、协议族介绍和开发流程。

3079

创新实训项目博客:基于LoRA的医疗大模型高效微调实战

预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

m0_73556916的博客 1290

企业AI Agent审计与合规:从日志留存到网络联动的完整落地指南

审计日志是企业安全与合规体系的基石,尤其在AI Agent大规模接入业务后,如何完整记录其行为链成为新的挑战。从日志留存180天到PCI DSS合规要求,审计体系需要覆盖会话、推理、工具调用、数据访问等关键环节,并结合不可篡改的存储设计,确保证据链可信。同时,借鉴上网行为管理设备对应用行为控制审计的思路,以及Kismet被动监测网络流量的方法论,将网络侧审计与应用侧日志交叉验证,能有效发现越权和异常行为。本文从日志采集、全链路追踪、基线预警到多租户隔离,系统梳理了AI Agent审计与合规落地的关键路径,帮

weixin_32234493的博客 263

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 82

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 学习一下233
下一篇: 123123
blog_005号
博客等级 码龄4年 266粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

blog_005号

谢谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值