动态

详情 返回 返回

go-logger v0.27.0 - 併發性能為官方庫 10 倍 - 动态 详情

go-logger 是一個高性能的 golang 日誌庫,旨在提供快速、輕量級的日誌記錄功能

Github

使用文檔

v0.27.0 更新內容

  1. 優化內存分配
  2. 優化寫數據性能
  3. 增加日誌屬性自定義函數
  4. 增加各個日誌級別格式化打印函數

説明

性能優化是該版本最重要的更新內容。性能優化的結果:
  1. 極高併發性能:極高的併發寫數據性能,比官方庫或同類型日誌庫高10倍以上。特別在Linux環境中,性能比同類型日誌庫高30倍以上.
  2. 極低內存佔用:是官方庫與同類型日誌庫的幾分之一
由於壓測數據篇幅過長,可以通過 使用文檔 或 《go日誌庫性能基準壓力測試:go-logger+slog+zap+log》 查看
如果應用場景為高併發場景,非常建議go-logger作為日誌庫工具,特別是在高併發場景中,需要記錄大量日誌,或需要調試的情況下,go-logger的併發高效性,使得開啓日誌記錄時,即使大量記錄日誌數據,也不會影響項目整體性能,項目的正常服務功能可以正常運作。
注意:在實際部署前,還是建議進行充分的測試,確保其滿足特定應用的需求。

以下新增功能説明:

1. 增加日誌屬性自定義函數 AttrFormat

通過 AttrFormat 可以對日誌的各個屬性標識進行自定義格式化設置
示例1:
 func Test_AttrFormat(t *testing.T) {
    attrformat := &logger.AttrFormat{
        SetLevelFmt: func(level logger.LEVELTYPE) string {
            switch level {
            case logger.LEVEL_DEBUG:
                return "debug:"
            case logger.LEVEL_INFO:
                return "info:"
            case logger.LEVEL_WARN:
                return "warn:"
            case logger.LEVEL_ERROR:
                return "error>>>>"
            case logger.LEVEL_FATAL:
                return "[fatal]"
            default:
                return "[unknown]"
            }
        },
        SetTimeFmt: func() (string, string, string) {
            s := time.Now().Format("2006-01-02 15:04:05")
            return s, "", ""
        },
    }
    logger.SetOption(&logger.Option{AttrFormat: attrformat, Console: true, FileOption: &logger.FileTimeMode{Filename: "testlogtime.log", Maxbuckup: 3, IsCompress: false, Timemode: logger.MODE_MONTH}})
    logger.Debug("this is a debug message", 1111111111111111111)
    logger.Info("this is a info message", 2222222222222222222)
    logger.Warn("this is a warn message", 33333333333333333)
    logger.Error("this is a error message", 4444444444444444444)
    logger.Fatal("this is a fatal message", 555555555555555555)
}
執行結果:
debug:2024-10-26 12:03:21 0_27_0_test.go:33 this is a debug message1111111111111111111
info:2024-10-26 12:03:21 0_27_0_test.go:34 this is a info message2222222222222222222
warn:2024-10-26 12:03:21 0_27_0_test.go:35 this is a warn message33333333333333333
error>>>>2024-10-26 12:03:21 0_27_0_test.go:36 this is a error message4444444444444444444
[fatal]2024-10-26 12:03:21 0_27_0_test.go:37 this is a fatal message555555555555555555
説明:修改了 LEVEL的標識 與時間的格式

示例2
func Test_AttrFormat2(t *testing.T) {
    attrformat := &logger.AttrFormat{
        SetBodyFmt: func(level logger.LEVELTYPE, bs []byte) []byte {
            //處理日誌末尾換行符
            if size := len(bs); bs[size-1] == '\n' {
                bs = append(bs[:size-1], []byte("\x1b[0m\n")...)
            } else {
                bs = append(bs, []byte("\x1b[0m\n")...)
            }
            switch level {
            case logger.LEVEL_DEBUG:
                return append([]byte("\x1b[34m"), bs...)
            case logger.LEVEL_INFO:
                return append([]byte("\x1b[32m"), bs...)
            case logger.LEVEL_WARN:
                return append([]byte("\x1b[33m"), bs...)
            case logger.LEVEL_ERROR:
                return append([]byte("\x1b[31m"), bs...)
            case logger.LEVEL_FATAL:
                return append([]byte("\x1b[41m"), bs...)
            default:
                return bs
            }
        },
    }
    logger.SetOption(&logger.Option{AttrFormat: attrformat, Console: true, FileOption: &logger.FileTimeMode{Filename: "testlogtime.log", Maxbuckup: 3, IsCompress: false, Timemode: logger.MODE_MONTH}})
    logger.Debug("this is a debug message:", 111111111111111110)
    logger.Info("this is a info message:", 222222222222222220)
    logger.Warn("this is a warn message:", 333333333333333330)
    logger.Error("this is a error message:", 4444444444444444440)
    logger.Fatal("this is a fatal message:", 5555555555555555550)
}
執行結果


2. 增加各個日誌級別格式化打印函數

通過 Debugf, Infof, Warnf, Errorf, Fatalf 等函數,支持在打印函數中使用 % 符號,用於指定輸出格式化模式。
示例
func Test_format(t *testing.T) {
    logger.Debugf("this is a debugf message:%d", 1)
    logger.Infof("this is a infof message:%s", "hi,logger")
    logger.Warnf("this is a warnf message:%x,%x", 14, 15)
    logger.Errorf("this is a errorf message:%f", 44.4444)
    logger.Fatalf("this is a fatalf message:%t", true)
    logger.Debugf("this is a debugf message:%p", new(int))
}
執行結果
[DEBUG]2024/10/26 12:08:55 0_27_0_test.go:74 this is a debugf message:1
[INFO]2024/10/26 12:08:55 0_27_0_test.go:75 this is a infof message:hi,logger
[WARN]2024/10/26 12:08:55 0_27_0_test.go:76 this is a warnf message:e,f
[ERROR]2024/10/26 12:08:55 0_27_0_test.go:77 this is a errorf message:44.444400
[FATAL]2024/10/26 12:08:55 0_27_0_test.go:78 this is a fatalf message:true
[DEBUG]2024/10/26 12:08:55 0_27_0_test.go:79 this is a debugf message:0xc00000a938
user avatar caisekongbai 头像 u_15700751 头像 hnclou 头像 niandb 头像 dalideshoushudao 头像 decaday 头像 lyflexi 头像 jianghushinian 头像 tencent_blueking 头像 zbooksea 头像 yunpan-plus 头像 kuaidi100api 头像
点赞 26 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.