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.