Go 零依賴結(jié)構(gòu)化日志處理
Devslog 是一個(gè)零依賴的結(jié)構(gòu)化日志處理程序,專為 Go 的 log/slog 包設(shè)計(jì),它提供了美觀且?guī)ь伾妮敵?,方便開發(fā)者調(diào)試。
Devslog 輸出
Devslog 提供了可讀性強(qiáng)的日志輸出格式,包括時(shí)間戳、日志級(jí)別、消息和鍵值對(duì)形式的上下文信息。還支持對(duì)日志進(jìn)行彩色輸出,方便開發(fā)者快速識(shí)別不同級(jí)別的日志。
與其他日志處理程序的比較
Devslog 提供了更直觀的日志輸出格式,與 TextHandler 和 JSONHandler 相比,Devslog 更易于閱讀和理解。
安裝
go get github.com/golang-cz/devslog@latest示例
無選項(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)值  | 類型  | 
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 開發(fā)者的調(diào)試需求。Devslog 零依賴,使用簡單,可以輕松集成到現(xiàn)有的 Go 項(xiàng)目中,為開發(fā)者提供更便捷的日志記錄和分析功能。















 
 
 









 
 
 
 