【Go开源宝藏】十分强大的日志库 logrus
【摘要】
文章目录
1. 写在前面2. 简单例子3. HOOKS4. 嵌入中间件
1. 写在前面
这次 所介绍的库是一个日志库 github.com/sirupsen/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")
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
这样就可以了,我们可以看到就会打印出一条 info
语句了。
同样的,还可以支持 Warn
、Error
、Fatal
等等…
3. HOOKS
同样的我们也可以直接使用 hooks 去构建我们体系。 比如ELK体系之类的。
加一个钩子就可以形成一套体系了。
下图为例子
日志会异步加载到ES,然后我们可以通过kibana进行快速搜索定位故障
4. 嵌入中间件
- 声明一个 log 对象
var LogrusObj *logrus.Logger
- 1
- 初始化日志配置
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
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 设置输出文件
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
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 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
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 用法:直接调用
LogrusObj.Infoln(err)
- 1
文章来源: blog.csdn.net,作者:小生凡一,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_45304503/article/details/126683356
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)