Serilog源码解析——使用方法

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

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

Serilog 核心功能#

目前,在 Asp.net core 中,对于日志记录库,除了微软官方准备的 Microsoft.Extensions.Logging 外,Serilog 也算是一个最常用的日志记录的类库。作为一类最常用的日志记录库,Serilog 具有良好的扩展性,其组织所维护的60多个项目均是为 Serilog 提供额外功能的扩展类库。为更好地了解源码具体在做什么,我们需要对 Serilog 有一个最基本的功能了解。

1. Serilog 将日志信息记录到哪里?#

Serilog 将日志记录媒介称之为 Sink,在 Serilog 组织维护的类库中,有各种各样的 Sink,比如说写入控制台的 ConsoleSink 以及写入文件的 FileSink 等。这些 Sink 的包名通常命名为 Serilog.Sinks.XXX。

那么 Serilog 如何向多个 Sinks 中写入日志呢?下面给出一个向控制台和文件写入日志的列例子。在此之前,我们需要向所在项目添加三个包:

  • Serilog
  • Serilog.Sinks.Console
  • Serilog.Sinks.File

添加完三个包之后,通过以下调用方式即可将日志写入到控制台和文件中。

var log = new LoggerConfiguration()
    .WriteTo.Console()
    .WriteTo.File("./log.txt")
    .CreateLogger();

log.Information("Hello world.");
log.Error("Hello world, again.");        

如果大家对之前的 Demo 了解的话,那么会觉得这段代码非常的熟悉。LoggerConfiguration类似于先前的LogBuilder,通过CreateLogger函数来创建对应的日志记录器,调用Console和File函数类似于先前的AddConsole以及AddFile方法,其输入参数的个数和形式都完全一样。但不同的是这些函数在WriteTo对象上调用而不是LoggerConfiguration上做调用,这一点和先前的 Demo 不一样,不过这一点并不影响我们的理解。再往后,日志的记录是通过Information和Error函数来调用,而LogDemo 中采用LogInformation和LogError函数记录日志。

Serilog源码解析——使用方法

 

上图显示的是 Serilog 向控制台中记录的日志信息,可以看到,其最终记录的日志信息和 LogDemo 差不多,均是日志时间+等级+消息。

2. Serilog 向 Sink 中具体写入了什么?#

在之前的 LogDemo 中,我们一直认为日志消息本质上就是一字符串。将日志记录下来就是将相关信息组合成字符串并写入到对应 Sink 中,这是非结构化日志记录库常用的做法。然而,这种使用方式有两个问题:

2.1 日志

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

相关推荐

Serilog日志框架

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

布史之铭 1810

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

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

2401_84558388的博客 963

C#之结构化日志Serilog

Serilog通过 LogEvent 结构化数据模型、消息模板解析、插件化 Sink 架构等设计,实现了高性能日志采集与分发,支持控制台、文件、数据库等多种输出目标。提供了结构化日志分析、动态上下文传递(LogContext)、全局属性注入(Enricher)以及多环境配置支持,

飞鹰技术 471

.NET可观测性实战:OpenTelemetry+Serilog+Prometheus全链路监控

可观测性是现代分布式系统稳定运行的核心能力,其本质是通过日志、指标、链路追踪三大支柱,实现对系统内部状态的可推断性。其底层原理依赖统一上下文传播(如Trace ID)、标准化语义约定(OpenTelemetry Logs/Metrics/Tracing规范)与低侵入采集机制。技术价值在于将模糊的‘系统变慢’转化为可定位的‘HttpClient第3次重试耗时2.1秒’,显著缩短MTTR。典型应用场景涵盖ASP.NET Core微服务、BackgroundService后台任务及EF Core数据访问层的全栈监

ciyinzhi8788的博客 670

从源码读懂 .NET:精选35+个开源项目作为进阶教材

开源项目本质上是比文档更完整的教材,源码中藏着API文档不会写的设计权衡与工程边界。理解一个框架,不仅要看它能做什么,更要看它在真实场景下如何定义抽象、处理异常、组织模块。这种能力需要通过阅读高质量代码来培养,而.NET生态恰好提供了大量兼具实用性与学习价值的仓库。从Web架构样板到轻量级ORM,从容错策略组件到结构化日志库,每个项目都对应一类典型工程问题。对于希望突破“会用API”阶段、深入理解架构设计的开发者来说,挑选边界清晰、测试完善的开源项目逐层精读,是成本最低且收益最高的成长路径。本文按学习目的梳

weixin_33391446的博客 225

技术博客的深度内容生产方法论:三层能力模型与.NET实战

技术博客的本质是可验证的知识操作系统,其核心在于将抽象的技术认知转化为可测量、可训练、可传承的能力体系。从基础概念出发,真正的深度内容需穿透框架表层,深入运行时机制(如.NET CoreCLR内存模型、JIT/AOT编译原理),依托真实生产事故、社区高频问题与源码演进三线交汇选题,以工程化方式输出结构化决策路径。它强调技术诚实、双轨验证(代码实测+表达精确)与可执行交付(配套CI/CD、压测脚本、故障注入),服务于具备三年以上开发经验、亟需提升系统判断力的进阶工程师。本文即基于‘老赵点滴’这一标杆实践,解析

diedangxiang4092的博客 410

Unity多人游戏开发实战:网络同步架构与核心源码解析

网络游戏开发的核心在于实现多客户端间的实时状态同步,其基础原理是通过网络协议在客户端与服务器之间传递数据,确保所有玩家看到一致的游戏世界。这一技术的关键价值在于支撑了大规模多人在线互动体验,广泛应用于MMORPG、FPS、MOBA等游戏类型。在工程实践中,客户端预测与服务器调和是解决网络延迟、提升操作响应的核心技术,通过预测玩家操作并在服务器端进行权威验证与状态同步,有效平衡了流畅性与公平性。本文以Unity3D为引擎,深入剖析一套完整的多人游戏实战源码,详细解读其网络架构设计、状态同步策略及关键模块实现,

weixin_33743880的博客 488

.NET技术博客的深度内容生产方法论

.NET 是微软推出的跨平台开源开发框架,其核心价值在于统一的 Runtime、高性能 JIT 编译器与成熟的工具链。理解 .NET 不仅需掌握 C# 语法和 API 使用,更需穿透至 Framework 层与 Runtime 层,厘清内存管理(如 Span<T>)、异步模型(async/await 状态机)及依赖注入等机制的底层原理。这种穿透式学习能显著提升系统可维护性与故障定位能力,广泛应用于企业级 Web 服务、微服务架构与云原生应用开发。本文聚焦真实工程场景中 .NET 博客如何通过源码验证、实证测

dejz8829的专栏 470

C#扑克牌游戏源码详解:面向对象设计与工程实践

扑克牌游戏是理解面向对象设计、状态管理与系统健壮性的经典技术载体。其背后涉及值对象建模、枚举位运算、确定性随机算法、延迟计算缓存、策略模式解耦及有限状态机控制等核心编程原理。这些能力直接映射到真实业务系统中的模块职责划分、边界防护与可扩展性保障。尤其在C#生态中,合理运用record struct、[Flags]枚举、依赖注入式Random、ReaderWriterLockSlim等特性,能显著提升代码的可测试性、并发安全性和长期可维护性。本文以52张牌逻辑为切口,深入剖析从单张Card到完整GameSes

weixin_30915275的博客 394

Unity编辑模式与播放模式调试全解析:从原理到实战技巧

在游戏开发中,调试是定位和修复问题的核心环节,其本质是通过观察程序运行状态、分析数据流和控制逻辑来诊断错误。Unity引擎作为主流开发工具,其调试体系基于两种核心模式构建:编辑模式与播放模式。理解这两种模式的底层运行机制差异,是高效调试的技术基础。编辑模式作为静态的“装配车间”,允许开发者直接修改和验证项目资产与配置,适合进行数据验证、编辑器脚本调试和场景设计;而播放模式则模拟了动态的“测试跑道”,创建了独立的运行时实例,用于测试游戏逻辑、交互和性能。掌握这两种模式的调试技巧,能帮助开发者精准定位问题阶段,

djai0102的博客 341

.NET开发实战:从底层框架到商业项目的进阶指南

在软件开发领域,理解底层框架原理是构建高性能、可维护应用的基础。通过深入剖析HTTP请求管道、依赖注入容器和ORM工作机制,开发者能够掌握系统核心运行机制,从而高效定位和解决复杂业务场景下的性能瓶颈与架构问题。这种从原理到实践的闭环学习路径,对于实现商业级项目至关重要。在实战层面,结合领域驱动设计(DDD)和清晰的分层架构,能够有效组织复杂业务逻辑,提升代码的可测试性和可扩展性。本文聚焦于.NET技术栈,通过系统讲解底层框架与商业项目落地的关键技术,帮助开发者跨越从理论到实践的鸿沟,构建符合生产环境要求的应

weixin_33851604的博客 375

C#新手避坑实录:用VOL框架连接MySQL/SQL Server,从数据库创建到项目启动的保姆级教程

本文详细介绍了使用VOL框架连接MySQL和SQL Server的完整流程,从数据库创建到项目启动的保姆级教程。特别针对C#新手常见的配置陷阱和错误处理提供了实用解决方案,帮助开发者快速掌握VOL框架的数据库配置技巧,提升开发效率。

weixin_33709219的博客 620

C#实战:如何用ADS协议快速搭建倍福PLC控制界面(附完整源码)

本文详细解析了如何利用C#和倍福ADS协议高效搭建PLC控制界面的全流程。从ADS通信核心原理、健壮通信层封装,到响应式UI设计与异常处理,提供了模块化、可扩展的实战源码框架,助力开发者快速构建稳定、实时的工业上位机软件。

weixin_29209805的博客 188

DeepSeek-V4 Pro长上下文与混合注意力技术解析

大语言模型的长上下文能力并非单纯扩大token窗口,而是关乎信息检索效率、推理稳定性与工程可用性。传统Transformer在百万级上下文中面临计算爆炸与信息衰减双重瓶颈,CSA(压缩稀疏注意力)与HCA(重度压缩注意力)混合机制通过语义分块、层级索引与硬件感知优化,实现KV缓存降低90%、显存占用下降73%的技术突破。这种设计使模型能在真实工程场景中稳定定位跨文件Bug、保持多轮重构一致性,并支撑百万token级源码级分析。结合两段式专家蒸馏训练与档位化推理调度,V4-Pro将编程理解从语法补全升维至架构

weixin_33749131的博客 495

C#.NET初级面试题解析:接口、集合与异步编程

面向对象编程中的接口与抽象类是定义行为契约的核心机制,接口强调多实现而抽象类侧重代码复用。在C#中,泛型集合通过类型安全的方式操作数据,而异步编程模型async/await则大幅简化了并发处理。这些基础概念构成了.NET开发的支柱技术,尤其在微服务架构中,正确使用依赖注入的生命周期管理(Transient/Scoped/Singleton)直接影响系统稳定性。本文通过典型面试题剖析,演示如何避免集合迭代修改异常、优化LINQ查询性能,并对比Task与Thread的适用场景,帮助开发者掌握C#/.NET面试的

ithome 460

手把手教你在全新服务器内网安装OpenEuler 22.03 LTS SP4+ 安装 openGuass 5.0.0(LTS) 数据库

openEuler是面向数字基础设施的操作系统,支持服务器、云计算、边缘计算、嵌入式等应用场景,支持多样性计算,致力于提供安全、稳定、易用的开源服务器Linux操作系统。

cgqyw的专栏 3736

PMSM无感foc控制(滑模-反正切-PLL)【仿真模型搭建教程】(附模型)

本文主要目的是教大家如何把文献中的公式转换成仿真模型。 首先介绍滑模控制的原理及如何搭建simulink模型。 1.1基于反电势估计位置原理 永磁同步电机在静止坐标系αβ下的电压方程: 扩展反电动势包含转子位置信息,并且αβ轴下扩展反电动势的反正切函数正好就等于位置角theta。 1.2 滑模控制原理(比较重要的点是以电机电流模型推导展开) 通过滑模观测得到鲁棒性比较高的αβ轴下扩展反电动势,并求其反正切函数,得到位置信息。 /*********************...

weixin_44769876的博客 1万+

无线控制的隐形桥梁:深入解析NRF24L01在电机控制中的数据传输艺术

本文深入解析NRF24L01无线模块在电机控制中的数据传输技术,涵盖通信机制优化、抗干扰策略及实时性保障。通过舵机和无刷电机的实战案例,展示如何构建稳定高效的无线控制系统,为嵌入式开发提供完整解决方案。

j7k8l的博客 333

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9181

Vscode + QT + CMake:高效开发环境搭建全攻略

本文详细介绍了如何搭建Vscode+QT+CMake高效开发环境,涵盖环境安装、配置优化及项目创建全流程。通过整合Vscode的轻量化编辑、QT的跨平台GUI开发以及CMake的现代构建管理,该组合特别适合大型QT项目和跨平台开发团队,能显著提升开发效率。

weixin_30338481的博客 504

从机械到数字:EC11旋转编码器与ESP32的PWM控制艺术

本文详细解析了EC11旋转编码器与ESP32的PWM控制技术,探讨了如何将机械旋转动作转换为精确的数字信号控制。通过硬件连接、信号处理和软件优化等实践技巧,开发者可以构建高效的人机交互系统,适用于智能照明、电机控制等多种应用场景。

android的专栏 782

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题分享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均分布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4042

芒果YOLOv8改进165:损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5% | 旋转检测

YOLOv8改进:旋转检测Loss损失函数angleLoss:即插即用 | 独家首发原创新颖|公开数据集DOTA高效无损涨点0.5%

包括YOLOv5、YOLOv7、YOLOv8等模型改进 1150

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 敬业!华为23级大佬消耗巨资整理出操作系统与网络协议硬核笔记!
下一篇: 程序员上班“划水”向阿里发起总攻 三面阿里开发岗位终成“菜鸟”P6
java架构师小芷
博客等级 码龄6年 216粉丝 519原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值