Nhật ký Fiber

Chúng ta có thể sử dụng nhật ký để quan sát hành vi của chương trình, chẩn đoán vấn đề, hoặc cấu hình cảnh báo tương ứng. Định nghĩa một nhật ký có cấu trúc tốt có thể cải thiện hiệu suất tìm kiếm và thuận tiện cho việc xử lý vấn đề.

Fiber cung cấp một cách mặc định để in nhật ký ra đầu ra tiêu chuẩn. Nó cũng cung cấp một số hàm toàn cục, như log.Info, log.Errorf, và log.Warnw.

Cấp độ Nhật ký

const (
    LevelTrace Level = iota
    LevelDebug
    LevelInfo
    LevelWarn
    LevelError
    LevelFatal
    LevelPanic
)

Nhật ký Tùy chỉnh

Fiber cung cấp giao diện AllLogger để thích nghi với các thư viện nhật ký khác nhau.

type CommonLogger interface {
    Logger
    FormatLogger
    WithLogger
}

type AllLogger interface {
    CommonLogger
    ControlLogger
    WithLogger
}

In Nhật ký

Lưu ý: Gọi các phương thức ở mức Fatal sẽ ngắt chương trình sau khi in nhật ký. Vui lòng sử dụng cẩn thận. In trực tiếp các nhật ký ở các mức khác nhau sẽ được đưa vào messageKey và mặc định là msg.

log.Info("Xin chào, thế giới!")
log.Debug("Bạn có ổn không?")
log.Info("42 là câu trả lời cho cuộc sống, vũ trụ, và mọi thứ")
log.Warn("Chúng ta đang bị tấn công!")
log.Error("Houston, chúng ta gặp vấn đề.")
log.Fatal("Chào tạm biệt, và cảm ơn vì tất cả cái cá.")
log.Panic("Hệ thống đang gặp sự cố.")

Định dạng và in nhật ký ở các mức khác nhau, tất cả các phương thức kết thúc bằng f.

log.Debugf("Xin chào %s", "bạn")
log.Infof("%d là câu trả lời cho cuộc sống, vũ trụ, và mọi thứ", 233)
log.Warnf("Chúng ta đang bị tấn công %s!", "sếp")
log.Errorf("%s, chúng ta gặp vấn đề.", "Master Shifu")
log.Fatalf("Chào tạm biệt, và cảm ơn vì tất cả %s.", "quả chuối")

In các thông điệp với các key và giá trị. Nếu các key và giá trị không được ghép cặp, KEYVALS UNPAIRED sẽ được in.

log.Debugw("", "Xin chào", "bạn")
log.Infow("", "số", 233)
log.Warnw("", "công việc", "sếp")
log.Errorw("", "tên", "Master Shifu")
log.Fatalw("", "quả", "quả chuối")

Nhật ký Toàn cầu

Nếu bạn chỉ muốn sử dụng một hàm nhật ký đơn giản trong dự án và in nó toàn cầu bất kỳ lúc nào, chúng tôi cung cấp một nhật ký toàn cầu.

import "github.com/gofiber/fiber/v2/log"

log.Info("thông tin")
log.Warn("cảnh báo")

Mã trên sử dụng log.DefaultLogger mặc định để đầu ra tiêu chuẩn. Bạn cũng có thể tìm thấy các bộ chuyển đổi đã được triển khai trong thư mục contrib, hoặc sử dụng Logger đã triển khai của riêng bạn và thiết lập nhật ký toàn cầu bằng cách sử dụng log.SetLogger.

import (
    "log"
    fiberlog "github.com/gofiber/fiber/v2/log"
)

var _ log.AllLogger = (*customLogger)(nil)

type customLogger struct {
    stdlog *log.Logger
}

// ...
// Inject custom logger
fiberlog.SetLogger(customLogger)

Đặt Cấp độ

log.SetLevel thiết lập các nhật ký ở mức thấp hơn mức này và sẽ không được đưa ra. Bộ ghi nhật ký mặc định là LevelTrace.

Vui lòng lưu ý rằng phương thức này không an toàn đối với đa luồng.

import "github.com/gofiber/fiber/v2/log"

log.SetLevel(log.LevelInfo)

Đặt Đầu ra

log.SetOutput thiết lập điểm đến đầu ra cho nhật ký. Mặc định, bộ ghi nhật ký in nhật ký ra bảng điều khiển.

var logger AllLogger = &defaultLogger{
    stdlog: log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile|log.Lmicroseconds),
    depth:  4,
}

Thiết lập điểm đến đầu ra thành tệp.

// Đầu ra ra tệp test.log
f, err := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
    return
}
log.SetOutput(f)

Thiết lập điểm đến đầu ra thành cả bảng điều khiển và tệp.

// Đầu ra ra tệp test.log
file, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
iw := io.MultiWriter(os.Stdout, file)
log.SetOutput(iw)

Kết nối Context

Thiết lập ngữ cảnh và sử dụng phương thức sau để trả về một phiên bản CommonLogger được liên kết với ngữ cảnh cụ thể.

commonLogger := log.WithContext(ctx)
commonLogger.Info("info")

Lưu ý: Đây là thư viện ghi nhật ký mặc định cho framework Fiber. Tất nhiên, bạn có thể chọn các thư viện ghi nhật ký mã nguồn mở Go khác nổi tiếng.