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