一架梯子,一头程序猿,仰望星空!
Go Fiber教程 > 内容正文

Go Fiber Logger


日志记录器

用于记录 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"                 // 重置颜色
)