文章目录
- 1. 写在前面
- 2. 简单例子
- 3. HOOKS
- 4. 嵌入中间件
1. 写在前面
这次 所介绍的库是一个日志库2. 简单例子 其实日志库用起来是很简单的,就和我们平时使用的github.com/sirupsen/logrus
,是我们在web开发中,经常需要的库,因为我们的应用部署到线上出现问题的话,就需要用日志来进行排查。
fmt.Println()
是类似的,所以我们只需要将这个package mainimport (
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体系之类的。
【遇见Golang|【Go开源宝藏】十分强大的日志库 logrus】加一个钩子就可以形成一套体系了。
下图为例子
日志会异步加载到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)
推荐阅读
- 遇见Golang|【SQL注入】关于GORM的SQL注入问题
- python|wasm转c调用实战
- #|智能电网中需求响应研究(Matlab代码实现)
- Python创造新事物|用Python制作我的核酸检测日历
- 历史上的今天|【历史上的今天】9 月 11 日(Adobe 公司联合创始人出生;现代游戏机鼻祖诞生;谷歌推出 Android Pay)
- 数学建模算法|2022国赛数学建模思路案例分析—因子分析
- #|基于蜜蜂算法求解电力系统经济调度(Matlab代码实现)
- #|基于多目标优化算法的电力系统分析(Matlab代码实现)
- JavaWeb从入门到实战|【JavaWeb】JDBC实战