当前位置: 首页 > news >正文

.NET 9使用Serilog

背景

在多线程并发场景中,当线程A和线程B同时向日志文件写入数据时,由于线程调度机制的不确定性,会导致日志条目交替穿插(如A→B→A→B),如下示例图:
在这里插入图片描述
这种乱序现象会严重影响故障排查效率。为解决该问题,采用Serilog日志框架配合内存队列实现批处理机制:通过将各线程产生的日志暂存到线程安全的队列中,再由独立线程批量提交到持久化存储。这种设计既避免了多线程直接竞争I/O资源,又能保持业务线程的执行效率,同时通过有序批量写入确保日志的可追溯性和顺序性。

本章目标:使用Serilog日志框架实现日志的批量写入,避免多线程环境下日志穿插的问题。

1. 安装必要 NuGet 包,后续还有其他的功能配置,干脆一次性把需要的包安装好。

Install-Package Serilog

Install-Package Serilog.Sinks.File

Install-Package Serilog.Sinks.Async

Install-Package Serilog.Settings.Configuration

Install-Package Serilog.Extensions.Logging

Install-Package Serilog.Sinks.Console

2. 创建内存日志接收器(MemorySink)
        public class MemorySink : ILogEventSink{private readonly ConcurrentQueue<LogEvent> _logEvents = new();public void Emit(LogEvent logEvent){_logEvents.Enqueue(logEvent); // 暂存日志到内存队列 }public IEnumerable<LogEvent> GetLogs() => _logEvents.ToArray();public void Clear() => _logEvents.Clear();}

MemorySink.Emit 方法由 Serilog 框架自动调用。当在作用域内使用 logger.Information() 等日志方法时,Serilog 内部管道会自动将日志事件传递给所有注册的 Sink(包括 MemorySink),触发其 Emit 方法

3. 封装作用域批量写入逻辑
        public class LogBatchScope : IDisposable{private readonly MemorySink _memorySink;private readonly Logger _logger;public LogBatchScope(){_memorySink = new MemorySink();_logger = new LoggerConfiguration().WriteTo.Sink(_memorySink)
http://www.dtcms.com/a/606956.html

相关文章:

  • 网站升级维护通知怎样做天猫 淘宝网站导购
  • 水果网站设计论文优舟网站建设
  • 【IP】公有&私有IP地址?
  • 《道德经》第五十六章
  • adb devices查看不到设备 是线长超过1米的原因?
  • 可视化的做网站的app泰安网站建设制作电话号码
  • dw个人网站模板外国语学院英文网站建设
  • 解锁 AI 开发技能:环境搭建、工具详解与第一个 AI 程序实战
  • 在 VSCode 中:lvgl库函数和lv_drivers以静态链接库的形式参与c应用项目的运行
  • 清华任天令团队《Nature》子刊: 基于无感化电子的运动非束缚动态心电系统
  • dify的是什么?怎么使用?
  • 湖仓一体部署
  • 地接做的网站企业为什么做企业网站和推广
  • STM32 HAL库原子操作编译问题解决指南
  • 珠海门户网站建设多少钱网站做前端
  • 建设银行征信中心网站石景山广州网站建设
  • 08.引用
  • 网站综合查询工具wordpress群聊
  • 服务器里面如何做网站怎么提交网址让百度收录
  • 福州做网站的公成都it培训机构
  • 蓝桥java蜗牛
  • 05.判断和循环
  • wordpress 制作手机站万网域名注册后如何做网站教学
  • DiT block学习
  • 武安市住房和城乡规划建设局网站wordpress下拉框插件
  • 广东东信润建设有限公司网站搜索关键词排名查询
  • fastapi 中的db.add db.comit db.flush db.refresh都是什么意思 有顺序吗
  • 网站301设置上海百度推广排名
  • 免费做店招哪个网站好新站网站推广该如何做
  • 宝安三网合一网站建设佛山外贸网站建设机构