fabirc1.0商业正式版本源码解析3——日志系统

2024-06-06 18:38

本文主要是介绍fabirc1.0商业正式版本源码解析3——日志系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里所说的日志,是指程序运行过程中打印到终端或日志文件,记录程序运行过程的日志,而非涉及到fabric记录交易数据,账本数据一类的交易日志。其实日志系统机制对于源码研究可以忽略,且相对简单,但是一方面日志系统对于程序运行和调试必不可少,fabric如何形成这个日志系统可以学习学习,日志所打印的内容对阅读源码也是一种提示;另一方面不弄清楚这个日志,在阅读源码的过程中这些到处出现的打印日志总像围绕在源码上面的蚊子一样,闹心。

fabric的日志系统主要使用了第三方包Go-logging,可在github.com/op/go-logging下载。很少一部分使用了go语言标准库中的log。在此基础上fabric自己封装出来了flogging,这个f,应该代表fabric吧,意思是说这是fabric的logging。代码集中在fabric/common/flogging目录下,供项目全局使用。

go-logging简介

简单点儿,logging其实就是封装了各种打印格式,包括消息层级上的,如DEBU、消息、注意、警告、错误,包括消息颜色上的,如消息是正常的绿色、错误则是醒目的红色。

基本用法如下:

//创建一个名字为examplename的日志对象log
var log = logging.MustGetLogger("examplename")
//创建一个日志输出格式对象format,也就是用什么格式输出
var format = logging.MustStringFormatter(`%{color}%{time:15:04:05.000} %{shortfunc} ▶ %{level:.4s} %{id:03x}%{color:reset} %{message}`,
)
//创建一个日志输出对象backend,也就是日志要打印到哪儿,在此是标准错误输出
backend := logging.NewLogBackend(os.Stderr, "", 0)
//将输出格式与输出对象绑定
backendFormatter := logging.NewBackendFormatter(backend, format)
//将绑定了格式的输出对象设置为日志的输出对象
//这样log打印每一句话都会按格式输出到backendFormatter所代表的对象里,在此即是标准错误输出
logging.SetBackend(backendFormatter)
//log打印依据Info信息
log.Info("info")
//log打印一句Error信息
log.Error("err")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

更多详细的用法,请在go doc或库中自行学习。

flogging

在flogging目录下有两个文件,grpclogger.gologging.go

grpclogger.go用于设置grpc的日志,因为grpc默认只是用go语言的标准日志接口,因此将logging封装成go语言的标准日志形式的结构type grpclogger struct {logger *logging.Logger},然后通过initgrpclogger()生成对象供grpc使用,从而实现让grpc也使用flogging的效果。

logging.go文件中,自带一个名为flogging的日志记录者logger,同时规定了默认的日志格式,日志等级,用defaultFormatdefaultLevel常量表示。默认的输出端defaultOutput,并有用于存放所有fabric模块日志的级别映射modules map[string]string,从类型上看其存储的日志级别都字符串化了。最后还有一个存放每个peer启动之时的日志级别的映射peerStartModules map[string]string,由在每个peer启动完成之时调用SetPeerStartupModulesMap()初始化,并可通过调用RevertToPeerStartupLevels()恢复初始值。

init函数

init()函数通过调用Reset()函数等初始化了一系列默认值,如默认的输出端被设置成标准错处输出,默认输出级别这设置成info级别。最后调用initgrpclogger()初始化了grpc的日志对象。

MustGetLogger函数

在许多各级不同模块的源码中,在全局的开始处都有类似一句这样的调用,如在fabric/peer/main.go中:var logger = flogging.MustGetLogger("main")。这就是调用MustGetLogger函数生成一个名为指定了名字的日志对象,用以记录该模块的日志,并用安全的方式(用锁的方式)将该对象记录日志的级别备案到modules中。MustGetLogger函数内部依然用的是go-logging库的相应函数logging.MustGetLogger()生成的日志对象。

其他函数

在logging.go中的其他函数,基本都是了封装go-logging库函数,供fabric全局使用。如SetModuleLevel函数,调用来调用去,其实就是封装了go-logging库中的logging.SetLevel()函数,以达到符合fabric自己使用要求的目的,可谓万变不离其宗

这篇关于fabirc1.0商业正式版本源码解析3——日志系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1036917

相关文章

解析 XML 和 INI

XML 1.TinyXML库 TinyXML是一个C++的XML解析库  使用介绍: https://www.cnblogs.com/mythou/archive/2011/11/27/2265169.html    使用的时候,只要把 tinyxml.h、tinystr.h、tinystr.cpp、tinyxml.cpp、tinyxmlerror.cpp、tinyxmlparser.

ONLYOFFICE 8.1 版本桌面编辑器测评

在现代办公环境中,办公软件的重要性不言而喻。从文档处理到电子表格分析,再到演示文稿制作,强大且高效的办公软件工具能够极大提升工作效率。ONLYOFFICE 作为一个功能全面且开源的办公软件套件,一直以来都受到广大用户的关注与喜爱。而其最新发布的 ONLYOFFICE 8.1 版本桌面编辑器,更是带来了诸多改进和新特性。本文将详细评测 ONLYOFFICE 8.1 版本桌面编辑器,探讨其在功能、用户

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

springboot家政服务管理平台 LW +PPT+源码+讲解

3系统的可行性研究及需求分析 3.1可行性研究 3.1.1技术可行性分析 经过大学四年的学习,已经掌握了JAVA、Mysql数据库等方面的编程技巧和方法,对于这些技术该有的软硬件配置也是齐全的,能够满足开发的需要。 本家政服务管理平台采用的是Mysql作为数据库,可以绝对地保证用户数据的安全;可以与Mysql数据库进行无缝连接。 所以,家政服务管理平台在技术上是可以实施的。 3.1

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了

Visual Studio中,MSBUild版本问题

假如项目规定了MSBUild版本,那么在安装完Visual Studio后,假如带的MSBUild版本与项目要求的版本不符合要求,那么可以把需要的MSBUild添加到系统中,然后即可使用。步骤如下:            假如项目需要使用V12的MSBUild,而安装的Visual Studio带的MSBUild版本为V14。 ①到MSDN下载V12 MSBUild包,把V12包解压到目录(

高仿精仿愤怒的小鸟android版游戏源码

这是一款很完美的高仿精仿愤怒的小鸟android版游戏源码,大家可以研究一下吧、 为了报复偷走鸟蛋的肥猪们,鸟儿以自己的身体为武器,仿佛炮弹一样去攻击肥猪们的堡垒。游戏是十分卡通的2D画面,看着愤怒的红色小鸟,奋不顾身的往绿色的肥猪的堡垒砸去,那种奇妙的感觉还真是令人感到很欢乐。而游戏的配乐同样充满了欢乐的感觉,轻松的节奏,欢快的风格。 源码下载

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

基于Java医院药品交易系统详细设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W+,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码+数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人  Java精品实战案例《600套》 2023-2025年最值得选择的Java毕业设计选题大全:1000个热