go开源宝藏十分强大的日志库logrus(代码片段)

小生凡一 小生凡一     2022-10-23     299

关键词:

文章目录

1. 写在前面

这次 所介绍的库是一个日志库 github.com/sirupsen/logrus ,是我们在web开发中,经常需要的库,因为我们的应用部署到线上出现问题的话,就需要用日志来进行排查。

2. 简单例子

其实日志库用起来是很简单的,就和我们平时使用的 fmt.Println() 是类似的,所以我们只需要将这个

package main

import (
  log "github.com/sirupsen/logrus"
)

func main() 
  log.WithFields(log.Fields
    "animal": "walrus",
  ).Info("A walrus appears")

这样就可以了,我们可以看到就会打印出一条 info 语句了。

同样的,还可以支持 WarnErrorFatal 等等…

3. HOOKS

同样的我们也可以直接使用 hooks 去构建我们体系。 比如ELK体系之类的。

加一个钩子就可以形成一套体系了。

下图为例子

日志会异步加载到ES,然后我们可以通过kibana进行快速搜索定位故障

4. 嵌入中间件

  • 声明一个 log 对象
var LogrusObj *logrus.Logger
  • 初始化日志配置

func init() 
	if LogrusObj != nil 
		src, _ := setOutputFile()
		//设置输出
		LogrusObj.Out = src
		return
	
	//实例化
	logger := logrus.New()
	src, _ := setOutputFile()
	//设置输出
	logger.Out = src
	//设置日志级别
	logger.SetLevel(logrus.DebugLevel)
	//设置日志格式
	logger.SetFormatter(&logrus.TextFormatter
		TimestampFormat: "2006-01-02 15:04:05",
	)
	/*
	加个hook形成ELK体系
	*/
	hook := model.EsHookLog()
	logger.AddHook(hook)
	LogrusObj = logger

  • 设置输出文件
func setOutputFile() (*os.File, error) 
	now := time.Now()
	logFilePath := ""
	if dir, err := os.Getwd(); err == nil 
		logFilePath = dir + "/logs/"
	
	_, err := os.Stat(logFilePath)
	if os.IsNotExist(err) 
		if err := os.MkdirAll(logFilePath, 0777); err != nil 
			log.Println(err.Error())
			return nil, err
		
	
	logFileName := now.Format("2006-01-02") + ".log"
	//日志文件
	fileName := path.Join(logFilePath, logFileName)
	if _, err := os.Stat(fileName); err != nil 
		if _, err := os.Create(fileName); err != nil 
			log.Println(err.Error())
			return nil, err
		
	
	//写入文件
	src, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
	if err != nil 
		log.Println(err)
		return nil, err
	
	return src, nil

  • ES 配置
func EsHookLog() *elogrus.ElasticHook 
	fmt.Println(EsClient)
	hook, err := elogrus.NewElasticHook(EsClient, esHost, logrus.DebugLevel, esIndex)
	fmt.Println("hook", hook)
	if err != nil 
		log.Panic(err)
	
	return hook

  • 用法:直接调用
LogrusObj.Infoln(err)

go的日志库logrus(代码片段)

简介logrus完全兼容Go的标准日志库log。同时它还支持文本、JSON两种日志输出格式。源码地址:https://github.com/sirupsen/logrus快速开始先安装:$gogetgithub.com/sirupsen/logrusquickstart:funcmain() //手动修改日志显示的级别,即... 查看详情

go的日志库logrus(代码片段)

简介logrus完全兼容Go的标准日志库log。同时它还支持文本、JSON两种日志输出格式。源码地址:https://github.com/sirupsen/logrus快速开始先安装:$gogetgithub.com/sirupsen/logrusquickstart:funcmain() //手动修改日志显示的级别,即... 查看详情

go日志库——log和logrus(代码片段)

Go日志库——log和logrus1.Log库在日常开发中,日志是必不可少的功能。虽然有时可以用fmt库输出一些信息,但是灵活性不够。Go标准库提供了一个日志库log。log默认输出到标准错误(stderr),每条日志前会自动... 查看详情

第三方日志库logrus使用(代码片段)

第三方日志库logrus使用日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发。本文介绍了logrus这个日志库的基本使用。logrus介绍Logrus是Go(golan... 查看详情

golanglogrus快速上手(代码片段)

...的示例5.小结参考文献1.logrus是什么?logrus是一款功能强大的Golang日志库,具有非常灵活的配置选项。它支持多种日志级别、格式和输出方式,包括JSON格式的输出、syslog输出等等。logrus也可以通过Hooks实现日志的异步... 查看详情

高性能go日志库zap设计与实现(代码片段)

...何在开发中让代码运行更加高效,然后在浏览各种优秀的日志设计的时候看到uber有一个叫zap的日志库引起了我的注意,它主要特性是对性能和内存分配都做到了极致的优化。对于我来说,原本在项目中是使用logrus来作为日志输... 查看详情

logrus日志框架(代码片段)

目录logrus介绍logrus配置日志打印HOOK机制Gin日志Fatal处理线程安全logrus介绍golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数。对于更精细的日志级别、日志文件分割,以及日志分发等方面,并没有提供支持。... 查看详情

go开源宝藏go-cron定时任务(代码片段)

GO-CRON1.cron是什么1.1cron简介1.2cron详细语法2.下载3.使用1.cron是什么1.1cron简介cron:计划任务,其实就是定时任务。和系统约个时间,在几点几分几秒或者每隔一段时间跑一个任务(job),就那么简单。1.2cron详细语法结... 查看详情

go开源宝藏go-doc自动生成项目结构目录(代码片段)

目录写在前面1.下载2.运行3.查看写在前面这个是可以自动生成项目的结构目录,方便后续开发人员的开发查看。1.下载goget-v-ugolang.org/x/tools/cmd/godoc2.运行在根目录下执行godoc-http=:60603.查看在浏览器中输入地址http://localhost:60... 查看详情

go开源宝藏golang爬虫|整点新花样(代码片段)

写在前面Python爬虫可能大家都玩腻了,那就玩一下Golang的爬虫吧!这篇文章会持续更新哒!思维导图想获取原图或是.xmind格式可在文末扫描并回复Go爬虫目录写在前面思维导图1.发送请求2.解析网页2.1CSS选择器2.2Xpath语... 查看详情

go开源宝藏go-swagger自动生成api接口文档(代码片段)

Go-Swagger写在前面1.使用2.API注释介绍3.请求部分4.响应部分写在前面安装goget-ugithub.com/swaggo/swag/cmd/swagGo-Swagger可以用来自动生成接口文档,减少大家编写接口文档的时间。1.使用先下载驱动goget-ugithub.com/swaggo/swag/cmd/swag头部导入... 查看详情

go开源宝藏gorm专场(含思维导图)|持续更新(代码片段)

写在前面本人只是一个Go语言的初学者,这篇文只是把我平常经常用到的都总结起来而已。具体详细的内容建议到去GORM的中文文档查看。当然这篇文章也会持续更新,记录我的CURD打磨过程这篇文章也会持续更新哒思维导... 查看详情

go开源宝藏web框架gin专场(含思维导图)|持续更新(代码片段)

写在前面本人只是一个Go语言的初学者,这篇总结只是把我平常经常用到的都总结起来而已。具体详细的内容建议到去GIN的中文文档查看。当然这篇文章也会持续更新,记录我的Web框架操练过程这篇文章也会持续更新哒思... 查看详情

go开源宝藏基于golang语法的性能调优技巧(字符串拼接)(代码片段)

文章目录字符串拼接参考链接字符串拼接我们一般使用字符串拼接方式有三种直接拼接str+="sum"fmt.Sprintf(“%s”,xxxxx)使用string.Builder使用bytes.Builder使用byte进行拼接我们先来写一个benchmark去测试每一种字符串拼接的情况... 查看详情

go开源宝藏jwt-go鉴权|中间件(文末送书嗷~)(代码片段)

🎉粉丝福利送书:《Go语言区块链应用开发从入门到精通》🎉点赞👍收藏⭐留言📝即可参与抽奖送书🎉下周三(9月22日)晚上20:00将会在【点赞区和评论区】抽一位粉丝送这本书~🙉🎉详情请... 查看详情

go开源宝藏基于golang语法的性能调优技巧(数组的遍历)(代码片段)

1.数组的遍历数组和切片的遍历方式一样,所以我们这里就不进行区分。我们一般用以下两种方式直接取下标方式fori:=0;i<len(nums);i++ ...我们先来讲一下这种方式,我们都知道数组在内存中存储是连续的。所以我... 查看详情

go开源宝藏cors跨域与csrf攻击|中间件(代码片段)

目录1.什么是跨域2.CSRF攻击2.1CSRF说明2.1原理3.CORS3.1简介3.2引用1.什么是跨域当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域当前页面url被请求页面url是否跨域原因http://www.test.com/http://www.test.com/index.... 查看详情

golanglogrus快速上手(代码片段)

文章目录1.logrus是什么?2.logrus快速上手3.logrus实现日志滚动4.一个完整的示例5.小结参考文献1.logrus是什么?logrus是一款流行的Golang日志库,具有非常灵活的配置选项。它支持多种日志级别、日志格式和输出方式,... 查看详情