Serilog源码解析——使用方法 (3)

Serilog源码的默认分支在dev上,这个分支主要是开发的版本,主要用于开发新功能以及修复bug,其变动通常会比较大,不利于学习。通常我们采用发行的最新版本去看,这里采用2.9.0版本,Serilog已经为其打上标签,我们只要切换过去就可以了。

截止到文章发出为止,Serilog已经出了2.10.0版本,不过因为当时还未更新,我看的是2.9.0版本,两个版本差距不大。

git chekckout v2.9.0

之后,需要还原包,编译代码,Serilog 的开发人员编写了一个文件帮助我们编译这个项目,在 windows 下运行 build.ps1 文件,在 Linux 下运行 build.sh 文件即可。

./build.ps1

可能有部分人会遇到无法运行的情况,可能需要修改 powershell 脚本的运行权限。

build.ps1 文件不光会还原项目所需的包,还会重新执行一遍测试代码,检测会不会有错。考虑Serilog是多平台(.net framwork 以及 .net core),在验证测试时,如果没有相应的运行框架,也会报错,不过这个没有关系,只要有其中一个就可以了,我们不是修改源码,阅读源码只要能在一个框架上运行就可以了。本系列主要关注的是 .net core 上的代码流程。

以上步骤全部完成后,就可以利用 vs 打开研究了。

项目架构

通过 vs 打开 Serilog.sln 文件后,整个项目如下所示。

Serilog 源码结构

可以发现,其结构比较清晰。

assert文件夹:一般称为资产文件夹,这里通常保存的是一些说明性文件以及配置文件。比如说README.md、build.ps1以及build.sh等,这里和本系列没有太多关系,可以忽略。

src文件夹:src是source的简写,里面保存的是Serilog的源码文件,是本次研究的重点,基本上大多工作都在这里面进行。

test文件夹:里面保存的是针对源码的测试功能代码文件。该文件夹下包含3个项目,Serilog.PerformanceTests应该是Serilog性能测试的项目,Serilog.Tests应该是源码功能测试项目,最后的TestDummies是为相关测试准备的数据类和功能类。考虑到测试代码使用了测试框架,该部分不是本文重点,因而对这块不会过多涉及。当然,如果大家对软件测试有所了解,测试代码能够帮你快速理解某些函数的具体功能。

接下来,我们看下 src 内具有有些什么。Serilog 组织者对这部分的代码维护较为仔细,基本上一个文件夹负责一个功能,这一点和之前的 LogDemo 一样,因此大部分文件夹可以一眼看出大概负责什么功能。

根目录:根目录包含四个文件,这点和LogDemo差不多,从LogDemo的结构和之前的使用经验可以猜出来,ILogger是核心功能接口,Log是静态类,它有着类似于ILogger的调用方法,LogConfiguration和LogBuilder一样,专门用来构造ILogger的对象,而LogExtensions则是扩展方法。

Core目录:从名字上可以猜的出来大概是 Serilog 项目最为核心的处理逻辑。

Events目录:在 Serilog 中,日志的记录不叫日志消息而叫日志事件,Events 内部保存的应该是和描述日志事件相关的结构,类似于 LogDemo 中的 Data 文件夹。

Confiuration目录:从名字以及LogConfiguration上可以看出,它内部应该是用于设置相关配置功能。

Debugging目录:用于调试功能。

Filters目录:用于设置过滤器。

Properties目录:这个目录很多项目里面都有,里面保存了AssemblyInfo类,该类主要用于描述当前程序集的一些相关信息,没有太大作用,可以忽略。

总结

今天这篇文章到这里就结束了,本文主要讲述了两个内容,一个是 serilog 的需求分析,它需要有哪些功能。另一个则是 Serilog 项目的源码,做了极其浅显的猜测和分析,为后面的分析提供基础。从下一篇开始,我们就正式进入项目的源码啦。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfddg.html