打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
【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)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Go语言 常用日志记录方法
Go 开发关键技术指南 | Go 面向失败编程 (内含超全知识大图)
golang 热更新技巧
Go项目实现日志按时间及文件大小切割并压缩
golang log 使用
Go实现海量日志收集系统(二)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服