【golang】源码层面学习日志框架logrus 01

本文详细探讨了Go语言库logrus的日志级别设置,揭示了默认Logger的行为,包括为何trace和debug级别不显示,以及fatal导致程序终止的机制。通过源码解析,解析了Logger对象的创建和级别判断过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载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级别的日志不会输出。

还有一个问题

上面解释了为什么trace和debug没显示,但是我们发现panic也没显示,程序在打印完fatal后就直接结束了。
我们点入logrus.Fatal()看看发生了什么
在这里插入图片描述
我们看到了关键代码
也就是这个Fatal在打印完之后,会调用Logger里面的Exit方法
在这里插入图片描述
在这里插入图片描述
我们发现它调用了ExitFunc方法,这个ExitFunc是不是很熟悉,其实之前我们在看New()源码的时候就看到了
在这里插入图片描述
可以看到默认的Logger对象里传的就是系统的退出方法,这也就是为什么我们打印完fatal后程序就结束了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值