logger
Logger中间件,支持从请求头、响应头等获取信息,日志中标签以{}标记,支持的标签如下:
host
请求的hostmethod
请求的methodpath
请求的pathproto
请求的协议类型query
请求的raw queryremote
请求的remote addrreal-ip
客户的真实IPclient-ip
客户的IP,与real-ip的区别是会判断IP是否公网IPscheme
HTTP或者HTTPSuri
请求的完整地址referer
请求的refereruserAgent
请求的user agentwhen
当前时间RFC1123带时区的格式化when-iso
当前时间RFC3339的格式化when-utc-iso
当前UTC时间的ISO格式化when-unix
当前时间的unix时间戳(秒)when-iso-ms
当前时间RFC3339的格式化(毫秒)when-utc-iso-ms
当前UTC时间的ISO格式化(毫秒)size
响应数据长度(字节)size-human
响应数据长度,格式化为KB/MB(以1024换算)status
状态码latency
响应时间latency-ms
响应时间(毫秒)~cookie
表示获取cookie的值,必须以~开头,后面的表示cookie的keypayload-size
提交数据长度(字节)payload-size-human
提交数据长度,格式化为KB/MB(以1024换算)>header
表示获取请求头的值,必须以>开头,后面表示header的key<header
表示获取响应头的值,必须以<开头,后面表示header的key:key
获取获取context设置的值,必须以:开头,后面表示对应的key,需要注意,设置至context中的值必须为string$key
从ENV中获取该key对应的值,必须以$开头,后面表示对应的key
预定义了四种格式化模板(建议使用时自定义日志模板):
LoggerCombined
:{remote} {when-iso} "{method} {uri} {proto}" {status} {size-human} "{referer}" "{userAgent}"
LoggerCommon
:{remote} {when-iso} "{method} {uri} {proto}" {status} {size-human}
LoggerShort
:{remote} {method} {uri} {proto} {status} {size-human} - {latency-ms} ms
LoggerTiny
:{method} {url} {status} {size-human} - {latency-ms} ms
Example
package main
import (
"fmt"
"github.com/vicanso/elton"
"github.com/vicanso/elton/middleware"
)
func main() {
e := elton.New()
// panic处理
e.Use(middleware.NewRecover())
e.Use(middleware.NewLogger(middleware.LoggerConfig{
Format: middleware.LoggerCombined,
OnLog: func(str string, _ *elton.Context) {
fmt.Println(str)
},
}))
// 响应数据转换为json
e.Use(middleware.NewDefaultResponder())
e.GET("/", func(c *elton.Context) error {
c.Body = &struct {
Message string `json:"message,omitempty"`
}{
"Hello, World!",
}
return nil
})
err := e.ListenAndServe(":3000")
if err != nil {
panic(err)
}
}