一、课程介绍

本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第六部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程!

一、本高级系列课程适合人群如下

1、有一定的NET开发基础。

2、喜欢阿笨的干货分享课程的童鞋们。

二、今天我们要解决的日志痛点问题描述

1)、你是否在为找到一款轻量级日志组件四处寻找而感到烦恼?

2)、你是否在为log4net、nlog繁琐的配置文件而感到烦恼?

3)、你是否在寻找一款日志文件记录的格式内容简洁的日志组件而感到烦恼?

4)、你是否在寻找一款可以支持自定义按照功能模块分类存储日志文件的组件而感到烦恼?

如果您有遇到以上提及到的其中一点的话,那么恭喜你很幸运看到了阿笨的轻量级EasyLogger日志组件。

废话不多说,直接上干货,我们不生产干货,我们只是干货的搬运工。

二、涉及覆盖的知识点

1、C#高效的线程安全队列ConcurrentQueue实战运用。

2、C# 线程的挂起与唤醒 (AutoResetEvent,ManualResetEvent)实战运用。

3、C# 采用生产者消费者队列模式将日志文件异步的落地在磁盘中。

4、C# EasyLogger实现自定义按照功能模块分类存储日志文件。(强烈推荐)

5、C# 微软单元测试UnitTest项目应用程序运用。

6、C# 性能测试器PerformanceTestor运用。

三、实战项目背景介绍

一、实战背景介绍

在我们实际项目中大家一般的开源日志组件比如:Log4net、NLog等等, 在使用的时候所有功能模块的日志记录的信息都依赖同一个配置,特别是在项目中的定时任务作业计划调度应用程序中 ,于是所有的作业日志信息都在记录在一个文件中,有时候查找起来,极其不方便。

那么我们能不能按照功能分类记录日志文件呢?虽然Log4net、NLog 可以通过 配置不同的logger,然后功能根据不同的LoggerName加载Ilog实例,是可以做到;但是实现起来繁琐和复杂。所以我们必须自己来造这个新轮子来满足适合工作中的实际项目需求。

二、EasyLogger特点介绍

1、简单、容易上手,只需要引入一个DLL文件即可;无需繁琐的配置文件。

2、支持多线程大并发同时写入。

3、支持自定义按照功能模块分类存储日志文件。(强烈推荐)

4、支持将日志文件存储在Elasticsearch全文搜索引擎中。(后续计划中)

四、EasyLogger实现原理

一、核心实现原理讲解

我们将使用列队将日志信息先缓存到内存,然后我们一直有个线程再从列队中写到磁盘上,这样就可以高速高性能的写日志了。

二、为什么说是超高性能日志组件?

EasyLogger内部采用典型的生产者消费模式。我们就把速度慢的地方分离出来了,也就是说程序在把日志扔给列队后,程序的日志部分就算完成了,后面操作磁盘耗时的部分程序是不需要关心的,由另一个线程操作将日志文件写在硬盘中。

实现原理图

五、源码在线解读和演示

项目截图

C#轻量级高性能日志组件EasyLogger的更多相关文章

  1. 使用SeasLog打造PHP项目中的高性能日志组件(一)

    云智慧(北京)科技有限公司 高驰涛 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为 ...

  2. 【PHP调试篇】PHP高性能日志组件SeasLog

    简述 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为什么使用SeasLog 无论在 ...

  3. 【腾讯Bugly干货分享】微信mars 的高性能日志模块 xlog

    本文来自于腾讯bugly开发者社区,未经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/581c2c46bef1702a2db3ae53 Dev Club 是一个交流移动 ...

  4. 性能秒杀log4net的NLogger日志组件(附测试代码与NLogger源码)

    NLogger特性: 一:不依赖于第三方插件和支持.net2.0 二:支持多线程高并发 三:读写双缓冲对列 四:自定义日志缓冲大小 五:支持即时触发刷盘机制 六:先按日期再按文件大小滚动Rolling ...

  5. 细说java平台日志组件

    1. java.util.logging JDK自带日志组件,使用方式简单,不需要依赖第三方日志组件.支持将日志打印到控制台,文件,甚至可以将日志通过网络打印到指定主机.相对于第三方独立日志框架来说, ...

  6. 【Go】类似csv的数据日志组件设计

    原文链接:https://blog.thinkeridea.com/201907/go/csv_like_data_logs.html 我们业务每天需要记录大量的日志数据,且这些数据十分重要,它们是公 ...

  7. zap高性能日志

    摘要 日志在整个工程实践中的重要性不言而喻,在选择日志组件的时候也有多方面的考量.详细.正确和及时的反馈是必不可少的,但是整个性能表现是否也是必要考虑的点呢?在长期的实践中发现有的日志组件对于计算资源 ...

  8. SpringBoot接入轻量级分布式日志框架(GrayLog)

    我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为优质八股文选手 前两天我不是发了一篇数据链路追踪的文章嘛,在末尾也遗留了TODO:运行应用的服务器一般是集群,日志数据会记录到不同的 ...

  9. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

随机推荐

  1. Nessus+Metasploit

    1.环境 受害者IP:10.0.0.6 2.攻击 首先使用Nessus进行扫描 扫描结果 我们将结果导出来,然后导入msfconsole中 使用vulns进行漏洞分析 查找对应的漏洞 使用漏洞进行攻击 ...

  2. Java给图片和PDF文件添加水印(图片水印和文字水印)

    有时候我们看到的图片或者PDF文件会自动加上水印.分为文字水印和图片水印. ----------------------------图片水印---------------------------- 1 ...

  3. springMVC初次搭建,产生错误

    七月 11, 2016 11:12:58 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Ap ...

  4. 修改history记录数门限

    你的 Bash 命令历史保存的历史命令的数量可以在 ~/.bashrc 文件里设置.在这个文件里,你可以找到下面两行: HISTSIZE=1000 HISTFILESIZE=2000 HISTSIZE ...

  5. 2012 Dhaka

    2012 Dhaka B - Wedding of Sultan 题目描述:给出一棵树的\(dfs\)序(只要经过就会记录),求每个点的度 solution 按\(dfs\)序的规则还原这棵树就好了. ...

  6. 设计模式及Python实现

    设计模式是什么? Christopher Alexander:“每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心.这样你就能一次又一次地使用该方案而不必做重复劳动.” 设计 ...

  7. 面试经典---数据库索引B+、B-树

    大型数据库数据都是存在硬盘中的,为了操作的速度,需要设计针对外存的数据结构.而数据库索引技术就是在面试中反复被问到的一个问题:数据库索引是怎么实现的?数据库索引越大越好吗? 需要详细了解下这方面的知识 ...

  8. Grafana 短信报警

    一.分析 需求 Grafana支持短信渠道报警 要求 使用开发提供的短信API接口 请求url: http://192.168.1.1:8088/alerting/sendSms?mobile=手机号 ...

  9. Java List 转 String

    JAVA中List转换String,String转换List,Map转换String,String转换Map之间的转换工具类(调优)https://www.cnblogs.com/cn-wxw/p/6 ...

  10. 如何写django中form的测试用例

    可简可繁, 可插库,可字符, 要测试valid,也要测试invalid, 可用csrf,也可用context. 放一个全面的, 实践中,找一个最优的组合就好. class NewTopicTests( ...