Go开源宝藏十分强大的日志库 logrus

Posted 小生凡一

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go开源宝藏十分强大的日志库 logrus相关的知识,希望对你有一定的参考价值。

文章目录

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的主要内容,如果未能解决你的问题,请参考以下文章

go的日志库logrus

go的日志库logrus

go的日志库logrus

Go日志库——log和logrus

第三方日志库logrus使用

第三方日志库logrus使用