日志记录器
用于记录 HTTP 请求/响应详细信息的 Fiber 的中间件。
接口
func New(config ...Config) fiber.Handler
示例
导入 Fiber Web 框架的中间件包
import (
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/logger"
)
提示: 注册的顺序很重要。只有在此之后注册的所有路由才会被记录。因此,此中间件应该是最先注册的之一。
在初始化 Fiber 应用程序之后,可以有以下注册中间件的可能方式:
// 初始化默认配置
app.Use(logger.New())
// 或者扩展配置进行个性化
// 记录远程 IP 和端口
app.Use(logger.New(logger.Config{
Format: "[${ip}]:${port} ${status} - ${method} ${path}\n",
}))
// 记录请求 ID
app.Use(requestid.New())
app.Use(logger.New(logger.Config{
// 更多选项,请参见 Config 部分
Format: "${pid} ${locals:requestid} ${status} - ${method} ${path}\n",
}))
// 更改时区和时间格式
app.Use(logger.New(logger.Config{
Format: "${pid} ${status} - ${method} ${path}\n",
TimeFormat: "02-Jan-2006",
TimeZone: "America/New_York",
}))
// 自定义文件写入器
file, err := os.OpenFile("./123.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error opening file: %v", err)
}
defer file.Close()
app.Use(logger.New(logger.Config{
Output: file,
}))
// 添加自定义标签
app.Use(logger.New(logger.Config{
CustomTags: map[string]logger.LogFunc{
"custom_tag": func(output logger.Buffer, c *fiber.Ctx, data *logger.Data, extraParam string) (int, error) {
return output.WriteString("这是一个自定义标签")
},
},
}))
// 日志写入后的回调函数
app.Use(logger.New(logger.Config{
TimeFormat: time.RFC3339Nano,
TimeZone: "Asia/Shanghai",
Done: func(c *fiber.Ctx, logString []byte) {
if c.Response().StatusCode() != fiber.StatusOK {
reporter.SendToSlack(logString)
}
},
}))
// 输出到默认格式时禁用颜色
app.Use(logger.New(logger.Config{
DisableColors: true,
}))
配置
属性 | 类型 | 描述 | 默认值 |
---|---|---|---|
Next | func(*fiber.Ctx) bool |
Next 定义了一个函数,当返回 true 时,跳过该中间件。 | nil |
Done | func(*fiber.Ctx, []byte) |
Done 是一种在将请求的日志字符串写入 Output 后调用的函数,并将日志字符串作为参数传递。 | nil |
CustomTags | map[string]LogFunc |
tagFunctions 定义了自定义标签操作。 | map[string]LogFunc |
Format | string |
Format 定义了日志标签。 | [${time}] ${status} - ${latency} ${method} ${path}\n |
TimeFormat | string |
TimeFormat 定义了日志时间戳的时间格式。 | 15:04:05 |
TimeZone | string |
TimeZone 可以指定为 “UTC”、”America/New_York”、”Asia/Chongqing” 等。 | "Local" |
TimeInterval | time.Duration |
TimeInterval 是更新时间戳之前的延迟时间。 | 500 * time.Millisecond |
Output | io.Writer |
Output 是一个用于写入日志的写入器。 | os.Stdout |
DisableColors | bool |
DisableColors 定义是否应该给输出的日志着色。 | false |
enableColors | bool |
启用日志输出中的颜色的内部字段。(这不是一个可配置的字段) | - |
enableLatency | bool |
启用日志中的延迟测量的内部字段。(这不是一个可配置的字段) | - |
timeZoneLocation | *time.Location |
时区位置的内部字段。(这不是一个可配置的字段) | - |
默认配置
var ConfigDefault = Config{
Next: nil,
Done: nil,
Format: "[${time}] ${status} - ${latency} ${method} ${path}\n",
TimeFormat: "15:04:05",
TimeZone: "Local",
TimeInterval: 500 * time.Millisecond,
Output: os.Stdout,
DisableColors: false,
}
常量
// Logger 变量
const (
TagPid = "pid" // 进程ID
TagTime = "time" // 时间
TagReferer = "referer" // 来源
TagProtocol = "protocol" // 协议
TagPort = "port" // 端口
TagIP = "ip" // IP地址
TagIPs = "ips" // IP地址
TagHost = "host" // 主机
TagMethod = "method" // 请求方法
TagPath = "path" // 路径
TagURL = "url" // URL
TagUA = "ua" // 用户代理
TagLatency = "latency" // 延迟时间
TagStatus = "status" // 响应状态
TagResBody = "resBody" // 响应体
TagReqHeaders = "reqHeaders" // 请求头
TagQueryStringParams = "queryParams" // 查询参数
TagBody = "body" // 请求体
TagBytesSent = "bytesSent" // 发送字节数
TagBytesReceived = "bytesReceived" // 接收字节数
TagRoute = "route" // 路由
TagError = "error" // 错误
// 已废弃: 使用 TagReqHeader 代替
TagHeader = "header:" // 请求头
TagReqHeader = "reqHeader:" // 请求头
TagRespHeader = "respHeader:" // 响应头
TagQuery = "query:" // 查询
TagForm = "form:" // 表单
TagCookie = "cookie:" // Cookie
TagLocals = "locals:" // 本地变量
// 颜色
TagBlack = "black" // 黑色
TagRed = "red" // 红色
TagGreen = "green" // 绿色
TagYellow = "yellow" // 黄色
TagBlue = "blue" // 蓝色
TagMagenta = "magenta" // 品红色
TagCyan = "cyan" // 青色
TagWhite = "white" // 白色
TagReset = "reset" // 重置颜色
)