本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第六部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给你们进行学习,不断的收集、整理和完善此系列课程!编程
1、本高级系列课程适合人群以下缓存
一、有必定的NET开发基础。安全
二、喜欢阿笨的干货分享课程的童鞋们。微信
2、今天咱们要解决的日志痛点问题描述多线程
1)、你是否在为找到一款轻量级日志组件四处寻找而感到烦恼?并发
2)、你是否在为log4net、nlog繁琐的配置文件而感到烦恼?app
3)、你是否在寻找一款日志文件记录的格式内容简洁的日志组件而感到烦恼?异步
4)、你是否在寻找一款能够支持自定义按照功能模块分类存储日志文件的组件而感到烦恼?ide
若是您有遇到以上说起到的其中一点的话,那么恭喜你很幸运看到了阿笨的轻量级EasyLogger日志组件。性能
废话很少说,直接上干货,咱们不生产干货,咱们只是干货的搬运工。
一、C#高效的线程安全队列ConcurrentQueue实战运用。
二、C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)实战运用。
三、C# 采用生产者消费者队列模式将日志文件异步的落地在磁盘中。
四、C# EasyLogger实现自定义按照功能模块分类存储日志文件。(强烈推荐)
五、C# 微软单元测试UnitTest项目应用程序运用。
六、C# 性能测试器PerformanceTestor运用。
1、实战背景介绍
在咱们实际项目中你们通常的开源日志组件好比:Log4net、NLog等等, 在使用的时候全部功能模块的日志记录的信息都依赖同一个配置,特别是在项目中的定时任务做业计划调度应用程序中 ,因而全部的做业日志信息都在记录在一个文件中,有时候查找起来,极其不方便。
那么咱们能不能按照功能分类记录日志文件呢?虽然Log4net、NLog 能够经过 配置不一样的logger,而后功能根据不一样的LoggerName加载Ilog实例,是能够作到;可是实现起来繁琐和复杂。因此咱们必须本身来造这个新轮子来知足适合工做中的实际项目需求。
2、EasyLogger特色介绍
一、简单、容易上手,只须要引入一个DLL文件便可;无需繁琐的配置文件。
二、支持多线程大并发同时写入。
三、支持自定义按照功能模块分类存储日志文件。(强烈推荐)
四、支持将日志文件存储在Elasticsearch全文搜索引擎中。(后续计划中)
1、核心实现原理讲解
咱们将使用列队将日志信息先缓存到内存,而后咱们一直有个线程再从列队中写到磁盘上,这样就能够高速高性能的写日志了。
2、为何说是超高性能日志组件?
EasyLogger内部采用典型的生产者消费模式。咱们就把速度慢的地方分离出来了,也就是说程序在把日志扔给列队后,程序的日志部分就算完成了,后面操做磁盘耗时的部分程序是不须要关心的,由另外一个线程操做将日志文件写在硬盘中。
实现原理图
项目截图