目录
我们使用日志的目的是什么?
-
想知道系统在运行过程中发生什么,是在哪里发生的
-
想知道发生的时间
-
想知道发生事件的级别是什么
日志级别
共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
All:最低等级的,用于打开所有日志记录.
Trace:是追踪,就是程序推进一下.
Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.
Info:消息在粗粒度级别上突出强调应用程序的运行过程.
Warn:输出警告及warn以下级别的日志.
Error:输出错误信息日志.
Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.
OFF:最高等级的,用于关闭所有日志记录.
程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少
在学习Zap之前我们先对go自带的log包做一下介绍。
log包
搭建简单gin项目
首先我们先搭建一个简单的gin项目
$ go get -u github.com/gin-gonic/gin
然后
package main
import "github.com/gin-gonic/gin"
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run(":9000") // 监听并在 0.0.0.0:9000 上启动服务
}
启动项目并访问:http://localhost:9000/ping,如果出现如下信息就是搭建成功了。
配置日志
我们如果想要log的输出在某一个文件中,那么我们就需要给程序指定一个文件的路径,如下面的程序。
package utils
import (
"log"
"os"
)
// SetupLogger 启动logger
func SetupLogger() {
outFile, _ := os.OpenFile("./log.log", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0744)
// 设置log输出位置
log.SetOutput(outFile)
}
我们将访问者的ip输出到log文件中,那么我们还需要获取访问者的ip。
此段代码出处:go 获取http请求中的ip地址,博主地址:weishunuan
package utils
import "net/http"
// RemoteIp 获取请求中的IP
func RemoteIp(req *http.Request) string {
var remoteAddr string
// RemoteAddr
remoteAddr = req.RemoteAddr
if remoteAddr != "" {
return remoteAddr
}
// ipv4
remoteAddr = req.Header.Get("ipv4")
if remoteAddr != "" {
return remoteAddr
}
//
remoteAddr = req.Header.Get("XForwardedFor")
if remoteAddr != "" {
return remoteAddr
}
// X-Forwarded-For
remoteAddr = req.Header.Get("X-Forwarded-For")
if remoteAddr != "" {
return remoteAddr
}
// X-Real-Ip
remoteAddr = req.Header.Get("X-Real-Ip")
if remoteAddr != "" {
return remoteAddr
} else {
remoteAddr = "127.0.0.1"
}
return remoteAddr
}
测试log
在主方法中启动刚才的日志配置。
package main
import (
"github.com/gin-gonic/gin"
"log"
"log/logtest/utils"
"net/http"
)
func