下载logrus
go get github.com/sirupsen/logrus基本使用 日志级别 通过查看logrus.go文件发现logrus一共有7个日志级别
文章图片
打印 新建一个main.go分别打印这几种级别的日志
文章图片
运行结果:
文章图片
发现和我们预期不符合,接下来就通过源码看看为什么会这样子。
初探源码
文章图片
随便进入其中一个方法,可以发现它调用了std.Trace,接下来就看下这个std是什么
文章图片
发现std=New(),再看看New()是什么
文章图片
可以看到New为我们返回了一个默认的Logger对象,也就是说直接通过包名.Info这样子打印日志,其实用的是logrus里默认的一个Logger对象(这也就意味着我们后面可以自定义logger对象)。在这个new里,我们看到了一个关键的地方Level:InfoLevel。发现默认的logger打印级别是info,这也就意味着info以下的级别日志是不打印的,这也就解释了为什么刚刚输出那里没有trace和debug信息。
接下来我们继续深入,看看这个日记级别是在哪里判断的。我们从logrus.Info()入手,不断的Ctrl+左键进入,最后发现了这么一段代码
文章图片
也就是logrus.Info()最后会变成调用Loger对象里的Log()方法,并将InfoLevel常数传入,直觉告诉我们接下来的级别判断就在这个方法里面。
文章图片
文章图片
不出所料,在这里判断了日志级别,所以这就是为什么低于info级别的日志不会输出。
还有一个问题 【golang|【golang】源码层面学习日志框架logrus 01】上面解释了为什么trace和debug没显示,但是我们发现panic也没显示,程序在打印完fatal后就直接结束了。
我们点入logrus.Fatal()看看发生了什么
文章图片
我们看到了关键代码
也就是这个Fatal在打印完之后,会调用Logger里面的Exit方法
文章图片
文章图片
我们发现它调用了ExitFunc方法,这个ExitFunc是不是很熟悉,其实之前我们在看New()源码的时候就看到了
文章图片
可以看到默认的Logger对象里传的就是系统的退出方法,这也就是为什么我们打印完fatal后程序就结束了
推荐阅读
- golang|golang性能分析工具pprof介绍
- Go精进|Go语言学习笔记——Golang 1.18新特性泛型
- Go|《Go Web 编程》之第4章 处理请求
- #|Shiro学习与笔记
- 开学季|开学季征文 | 一位开发实习生的真情流露
- Redis学习笔记——数据类型
- java|学习记录(JAVA 基础知识错题记录①)
- 遇见Golang|【Go开源宝藏】十分强大的日志库 logrus
- 深度学习|学习日记(深度学习CPU与GPU)