C#轻量级高性能日志组件EasyLogger(六)

一、课程介绍

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

实现原理图

五、源码在线解读和演示

项目截图

六、在线源码解读和演示

在线观看地址:跟着阿笨一起玩NET

微信公众号:ABenDotNet

原文地址:http://blog.51cto.com/4500899/2142639

时间: 2024-08-13 16:47:41

C#轻量级高性能日志组件EasyLogger(六)的相关文章

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

云智慧(北京)科技有限公司 高驰涛 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为什么使用SeasLog 无论在什么应用中,log日志都是架构中不可缺少的一个重要组成部分,它通常是系统或软件.应用的运行记录.通过log的分析,可以方便用户了解系统或软件.应用的运行情况:如果你的应用log足够丰富,也可以分析以往用户的操作行为.类型喜好.地域分布或其他更多信息:如果一个应用的log

细说java平台日志组件

1. java.util.loggingJDK自带日志组件,使用方式简单,不需要依赖第三方日志组件.支持将日志打印到控制台,文件,甚至可以将日志通过网络打印到指定主机.相对于第三方独立日志框架来说,支持的日志级别比较少,功能也比较单一. 2. apache commons logginghttps://commons.apache.org/proper/commons-logging/index.htmlApache Commons Logging简称JCL.JCL提供了一个轻量级的日志抽象,为

基于log4net的日志组件扩展分装,实现自动记录交互日志 XYH.Log4Net.Extend

背景: 随着公司的项目不断的完善,功能越来越复杂,服务也越来越多(微服务),公司迫切需要对整个系统的每一个程序的运行情况进行监控,并且能够实现对自动记录不同服务间的程序调用的交互日志,以及通一个服务或者项目中某一次执行情况的跟踪监控 根据log4net的现有功能满足不了实际需求,所以需要以log4net为基础进行分装完善,现在分装出了一个基础的版本,如有不妥之处,多多指点功能简介: 该组件是在log4net的基础上,进行了一定的扩展封装实现的自动记录交互日志功能 该组件的封装的目的是解决一下几个

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

原文链接:https://blog.thinkeridea.com/201907/go/csv_like_data_logs.html 我们业务每天需要记录大量的日志数据,且这些数据十分重要,它们是公司收入结算的主要依据,也是数据分析部门主要得数据源,针对这么重要的日志,且高频率的日志,我们需要一个高性能且安全的日志组件,能保证每行日志格式完整性,我们设计了一个类 csv 的日志拼接组件,它的代码在这里 datalog. 它是一个可以保证日志各列完整性且高效拼接字段的组件,支持任意列和行分隔符,

基于轻量级高性能的CSS3动画库

简要教程 Repaintless.css是一款轻量级高性能的CSS3动画库.Repaintless.css通过特殊的方法来制作元素动画,不会引起页面的重绘,使它比其它CSS动画库具有更高的性能. 安装 你可以通过bower或npm来安装Repaintless.css. 1 $ bower install repaintless 2 $ npm install repaintless 使用方法 使用该CSS3动画库需要在页面中引入repaintless.css文件. 1 <link href=&quo

2015第30周四Java日志组件

Java 日志 API 从功能上来说,日志 API 本身所需求的功能非常简单,只需要能够记录一段文本即可.API 的使用者在需要进行记录时,根据当前的上下文信息构造出相应的文本信息,调用 API 完成记录.一般来说,日志 API 由下面几个部分组成: 记录器(Logger):日志 API 的使用者通过记录器来发出日志记录请求,并提供日志的内容.在记录日志时,需要指定日志的严重性级别.当 程序中需要记录日志时,首先需要获取一个日志记录器对象.一般的日志记录 API 都提供相应的工厂方法来创建记录器

高性能 Socket 组件 HP-Socket v3.2.1 正式发布

HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Delphi.E(易语言).Java.Python 等编程语言接口.HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节:HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中.为了让使用者能方便快速地学习和使用 HP-Socket,

【转】java日志组件介绍(common-logging,log4j,slf4j,logback )

common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使用common-logging,通常都是配合着log4j来使用.使用它的好处就是,代码依赖是common-loggin

日志组件介绍(common-logging,log4j,slf4j,logback)

common-logging common-logging是apache提供的一个通用的日志接口.用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库.当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱.所以使用common-logging,通常都是配合着log4j来使用.使用它的好处就是,代码依赖是common-loggin