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
语句了。
同样的,还可以支持 Warn
、Error
、Fatal
等等…
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的主要内容,如果未能解决你的问题,请参考以下文章