lazygophers/log

一個高性能、靈活的 Go 日誌庫,基於 zap 構建,提供豐富的功能和簡潔的 API。
📖 文檔語言
✨ 特性
- 🚀 高性能:基於 zap 構建,採用物件池重用 Entry 物件,減少記憶體分配
- 📊 豐富的日誌級別:支援 Trace、Debug、Info、Warn、Error、Fatal、Panic 級別
- ⚙️ 靈活的配置:
- 日誌級別控制
- 調用者資訊記錄
- 追蹤資訊(包括 goroutine ID)
- 自定義日誌前綴和後綴
- 自定義輸出目標(控制台、文件等)
- 日誌格式化選項
- 🔄 文件輪轉:支援每小時日誌文件輪轉
- 🔌 Zap 相容性:與 zap WriteSyncer 無縫集成
- 🎯 簡潔的 API:類似標準日誌庫的清晰 API,易於使用
🚀 快速開始
安裝
go get github.com/lazygophers/log
基本用法
package main
import (
"github.com/lazygophers/log"
)
func main() {
// 使用預設全域 logger
log.Debug("調試資訊")
log.Info("普通資訊")
log.Warn("警告資訊")
log.Error("錯誤資訊")
// 使用格式化輸出
log.Infof("用戶 %s 登錄成功", "admin")
// 自定義配置
customLogger := log.New().
SetLevel(log.InfoLevel).
EnableCaller(false).
SetPrefixMsg("[MyApp]")
customLogger.Info("這是來自自定義 logger 的日誌")
}
📚 高級用法
帶文件輸出的自定義 Logger
package main
import (
"os"
"github.com/lazygophers/log"
)
func main() {
// 建立帶文件輸出的 logger
logger := log.New().
SetLevel(log.DebugLevel).
EnableCaller(true).
EnableTrace(true).
SetOutput(os.Stdout, log.GetOutputWriterHourly("/var/log/myapp.log"))
logger.Debug("帶調用者資訊的調試日誌")
logger.Info("帶追蹤資訊的普通日誌")
}
日誌級別控制
package main
import "github.com/lazygophers/log"
func main() {
logger := log.New().SetLevel(log.WarnLevel)
// 只有 warn 及以上級別會被記錄
logger.Debug("這不會被記錄") // 忽略
logger.Info("這不會被記錄") // 忽略
logger.Warn("這會被記錄") // 記錄
logger.Error("這會被記錄") // 記錄
}
🔧 配置選項
Logger 配置
| 方法 |
描述 |
預設值 |
SetLevel(level) |
設定最低日誌級別 |
DebugLevel |
EnableCaller(enable) |
啟用/禁用調用者資訊 |
false |
EnableTrace(enable) |
啟用/禁用追蹤資訊 |
false |
SetCallerDepth(depth) |
設定調用者深度 |
2 |
SetPrefixMsg(prefix) |
設定日誌前綴 |
"" |
SetSuffixMsg(suffix) |
設定日誌後綴 |
"" |
SetOutput(writers...) |
設定輸出目標 |
os.Stdout |
日誌級別
| 級別 |
描述 |
TraceLevel |
最詳細,用於詳細追蹤 |
DebugLevel |
調試資訊 |
InfoLevel |
普通資訊 |
WarnLevel |
警告資訊 |
ErrorLevel |
錯誤資訊 |
FatalLevel |
致命錯誤(調用 os.Exit(1)) |
PanicLevel |
恐慌錯誤(調用 panic()) |
🏗️ 架構
核心組件
- Logger:主日誌結構,具有可配置的級別、輸出、格式化器和調用者深度
- Entry:單個日誌記錄,包含全面的元數據支援
- Level:日誌級別定義和工具函數
- Format:日誌格式化介面和實現
性能優化
- 物件池:重用 Entry 物件以減少記憶體分配
- 條件記錄:僅在需要時記錄昂貴欄位
- 快速級別檢查:在最外層檢查日誌級別
- 無鎖設計:大多數操作不需要鎖
📊 性能比較
| 特性 |
lazygophers/log |
zap |
logrus |
標準日誌 |
| 性能 |
高 |
高 |
中 |
低 |
| API 簡潔性 |
高 |
中 |
高 |
高 |
| 功能豐富度 |
中 |
高 |
高 |
低 |
| 靈活性 |
中 |
高 |
高 |
低 |
| 學習曲線 |
低 |
中 |
中 |
低 |
🔗 相關文檔
🚀 獲取幫助
📄 許可證
本專案採用 MIT 許可證 - 詳見 LICENSE 文件。
🤝 貢獻
我們歡迎貢獻!請查看我們的 貢獻指南 了解詳情。
lazygophers/log 旨在成為重視性能和簡潔性的 Go 開發者的首選日誌解決方案。無論您是構建小型工具還是大規模分散式系統,該庫都能提供功能和易用性之間的良好平衡。