Go 零依賴(lài)結(jié)構(gòu)化日志處理
Devslog 是一個(gè)零依賴(lài)的結(jié)構(gòu)化日志處理程序,專(zhuān)為 Go 的 log/slog 包設(shè)計(jì),它提供了美觀且?guī)ь伾妮敵?,方便開(kāi)發(fā)者調(diào)試。
Devslog 輸出
Devslog 提供了可讀性強(qiáng)的日志輸出格式,包括時(shí)間戳、日志級(jí)別、消息和鍵值對(duì)形式的上下文信息。還支持對(duì)日志進(jìn)行彩色輸出,方便開(kāi)發(fā)者快速識(shí)別不同級(jí)別的日志。
與其他日志處理程序的比較
Devslog 提供了更直觀的日志輸出格式,與 TextHandler 和 JSONHandler 相比,Devslog 更易于閱讀和理解。
安裝
go get github.com/golang-cz/devslog@latest
示例
無(wú)選項(xiàng)的日志記錄器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
logger := zap.New(devslog.NewHandler(os.Stdout, nil))
// 可選:設(shè)置全局日志記錄器
zap.SetDefault(logger)
logger.Info("這是信息日志")
logger.Debug("這是調(diào)試日志")
logger.Warn("這是警告日志")
logger.Error("這是錯(cuò)誤日志")
}
帶自定義選項(xiàng)的日志記錄器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
// 帶選項(xiàng)的新日志記錄器
opts := &devslog.Options{
MaxSlicePrintSize: 4, // 設(shè)置切片最大打印元素?cái)?shù)量
SortKeys: true, // 設(shè)置是否按鍵排序?qū)傩? TimeFormat: "[04:05]", // 設(shè)置時(shí)間戳格式
NewLineAfterLog: true, // 設(shè)置是否在每個(gè)日志后添加空行
DebugColor: devslog.Magenta, // 設(shè)置調(diào)試級(jí)別的顏色
StringerFormatter: true, // 設(shè)置是否使用 Stringer 接口進(jìn)行格式化
}
logger := zap.New(devslog.NewHandler(os.Stdout, opts))
// 可選:設(shè)置全局日志記錄器
zap.SetDefault(logger)
logger.Info("這是信息日志")
logger.Debug("這是調(diào)試日志")
logger.Warn("這是警告日志")
logger.Error("這是錯(cuò)誤日志")
}
帶默認(rèn) slog 選項(xiàng)的日志記錄器
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
// slog.HandlerOptions
slogOpts := &zap.HandlerOptions{
AddSource: true, // 設(shè)置是否添加源信息
Level: zap.LevelDebug, // 設(shè)置日志級(jí)別
}
// 帶選項(xiàng)的新日志記錄器
opts := &devslog.Options{
HandlerOptions: slogOpts, // 使用默認(rèn)的 slog.HandlerOptions
MaxSlicePrintSize: 4, // 設(shè)置切片最大打印元素?cái)?shù)量
SortKeys: true, // 設(shè)置是否按鍵排序?qū)傩? NewLineAfterLog: true, // 設(shè)置是否在每個(gè)日志后添加空行
StringerFormatter: true, // 設(shè)置是否使用 Stringer 接口進(jìn)行格式化
}
logger := zap.New(devslog.NewHandler(os.Stdout, opts))
// 可選:設(shè)置全局日志記錄器
zap.SetDefault(logger)
logger.Info("這是信息日志")
logger.Debug("這是調(diào)試日志")
logger.Warn("這是警告日志")
logger.Error("這是錯(cuò)誤日志")
}
示例用法
import (
"os"
"github.com/golang-cz/devslog"
"go.uber.org/zap"
)
func main() {
slogOpts := &zap.HandlerOptions{
AddSource: true, // 設(shè)置是否添加源信息
Level: zap.LevelDebug, // 設(shè)置日志級(jí)別
}
var logger *zap.Logger
if production {
logger = zap.New(zap.NewJSONHandler(os.Stdout, slogOpts))
} else {
opts := &devslog.Options{
HandlerOptions: slogOpts, // 使用默認(rèn)的 slog.HandlerOptions
MaxSlicePrintSize: 10, // 設(shè)置切片最大打印元素?cái)?shù)量
SortKeys: true, // 設(shè)置是否按鍵排序?qū)傩? NewLineAfterLog: true, // 設(shè)置是否在每個(gè)日志后添加空行
StringerFormatter: true, // 設(shè)置是否使用 Stringer 接口進(jìn)行格式化
}
logger = zap.New(devslog.NewHandler(os.Stdout, opts))
}
// 可選:設(shè)置全局日志記錄器
zap.SetDefault(logger)
logger.Info("這是信息日志")
logger.Debug("這是調(diào)試日志")
logger.Warn("這是警告日志")
logger.Error("這是錯(cuò)誤日志")
}
選項(xiàng)
參數(shù) | 描述 | 默認(rèn)值 | 類(lèi)型 |
MaxSlicePrintSize | 指定切片打印的最大元素?cái)?shù)量 | 50 | uint |
SortKeys | 確定是否按鍵排序?qū)傩?br> | false | bool |
TimeFormat | 時(shí)間戳格式 | "[15:04:05]" | string |
NewLineAfterLog | 在每個(gè)日志后添加空行 | false | bool |
StringIndentation | 在字符串中縮進(jìn) | false | bool |
DebugColor | 調(diào)試級(jí)別的顏色 | devslog.Blue | devslog.Color (uint) |
InfoColor | 信息級(jí)別的顏色 | devslog.Green | devslog.Color (uint) |
WarnColor | 警告級(jí)別的顏色 | devslog.Yellow | devslog.Color (uint) |
ErrorColor | 錯(cuò)誤級(jí)別的顏色 | devslog.Red | devslog.Color (uint) |
MaxErrorStackTrace | 錯(cuò)誤的最大堆棧跟蹤幀數(shù) | 0 | uint |
StringerFormatter | 使用 Stringer 接口進(jìn)行格式化 | false | bool |
NoColor | 禁用彩色輸出 | false | bool |
總結(jié)
Devslog 是一個(gè)方便易用的結(jié)構(gòu)化日志處理程序,它提供了美觀、彩色、可讀性強(qiáng)的日志輸出,非常適合 Go 開(kāi)發(fā)者的調(diào)試需求。Devslog 零依賴(lài),使用簡(jiǎn)單,可以輕松集成到現(xiàn)有的 Go 項(xiàng)目中,為開(kāi)發(fā)者提供更便捷的日志記錄和分析功能。