over-golang/03-工程管理/07-日志管理.md
2021-07-02 18:11:59 +08:00

80 lines
2.6 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## Go的日志管理工具
Go语言提供了一个简易的log包可以方便的实现日志记录的功能但是这些日志都是基于fmt包的打印再结合panic之类的函数来进行一般的打印抛出错误处理
Go目前标准包只是包含了简单的功能如果我们想把我们的应用日志保存到文件然后又能够结合日志实现很多复杂的功能例如Java的log4jNode的log4js推荐[logrus](https://github.com/sirupsen/logrus)。
## logrus的使用
#### 2.1 简单使用
安装logrus
```Go
go get -u github.com/sirupsen/logrus
```
简单例子:
```Go
package main
import (
log "github.com/sirupsen/logrus"
)
func main() {
log.WithFields(log.Fields{
"animal": "walrus",
}).Info("Info信息*****")
}
```
#### 2.2 自定义日志处理
```Go
package main
import (
"os"
log "github.com/sirupsen/logrus"
)
func init() {
// 日志格式化为JSON而不是默认的ASCII
log.SetFormatter(&log.JSONFormatter{})
// 输出stdout而不是默认的stderr也可以是一个文件
log.SetOutput(os.Stdout)
// 只记录严重或以上警告
log.SetLevel(log.InfoLevel)
}
func main() {
log.WithFields(log.Fields{
"params1": "walrus",
"params2": 10,
}).Info("info信息.....")
log.WithFields(log.Fields{
"params3": true,
"params4": 122,
}).Warn("warn信息.....")
log.WithFields(log.Fields{
"params5": true,
"params6": 100,
}).Fatal("fatal信息....")
}
```
## 使用应用日志
对于应用日志每个人的应用场景可能会各不相同有些人利用应用日志来做数据分析有些人利用应用日志来做性能分析有些人来做用户行为分析还有些就是纯粹的记录以方便应用出现问题的时候辅助查找问题
举一个例子我们需要跟踪用户尝试登陆系统的操作这里会把成功与不成功的尝试都记录下来记录成功的使用"Info"日志级别而不成功的使用"warn"级别如果想查找所有不成功的登陆我们可以利用linux的grep之类的命令工具如下
```Go
# cat /data/logs/roll.log | grep "failed login"
2012-12-11 11:12:00 WARN : failed login attempt from 11.22.33.44 username password
```
通过这种方式我们就可以很方便的查找相应的信息这样有利于我们针对应用日志做一些统计和分析另外我们还需要考虑日志的大小对于一个高流量的Web应用来说日志的增长是相当可怕的所以我们在seelog的配置文件里面设置了logrotate这样就能保证日志文件不会因为不断变大而导致我们的磁盘空间不够引起问题