介绍

dlog是用GO语言实现的一个简略高效、反对文件轮换以及日志分级的日志SDK。其特色如下:

  • 采纳文件日志类型采纳了内存缓存,满足高性能输入日志。
  • 反对日志分级,具体分级如下:

    • fatal (log.LOG_FATAL)
    • error (log.LOG_ERROR)
    • warn (log.LOG_WARN)
    • info (log.LOG_INFO)
    • debug (log.LOG_DEBUG)
  • 反对终端日志类型以及可依照工夫进行轮换的文件日志类型。
  • 文件日志类型反对依照天或小时进行轮换输入。

装置阐明

go get github.com/haming123/wego/dlog

应用文档

请点击:具体文档

输入日志到终端

dlog的缺省日志类型为:TermLogger(终端日志类型),应用TermLogger时不须要初始化,可间接应用日志输入函数输入日志。

package mainimport log "dlog"func main()  {    log.Debug("This is a Debug Message")    log.Info("This is a Info Message")}//执行后的输入后果为://2021/11/30 07:20:06 [D] main.go:31 This is a Debug Message//2021/11/30 07:20:06 [I] main.go:32 This is a Debug Info

日志级别

dlog反对5个日志级别,别离是:fatal、error、warn、info、debug。

package mainimport log "dlog"func main()  {    log.Debug("This is Debug Message")    log.Info("This is Info Message")    log.Warn("This is Warn Message")    log.Error("This is Error Message")    log.Fatal("This is Fatal Message")}

输入格局

dlog反对为每个级别的日志提供了一个xxxf、xxxJSON、xxxXML的函数,用于输入不同格局日志:

package mainimport log "dlog"func main()  {    log.Debugf("This is a %s Message", "Debug")    log.Infof("This is a %s Message", "Info")}

输入JSON格局的日志:

package mainimport log "dlog"func main()  {    type User struct {        Name     string        Age     int    }    user := User{Name:"lisi", Age:12}    log.DebugJSON(user)}

输入XML格局的日志:

package mainimport log "dlog"func main()  {    type User struct {        Name     string        Age     int    }    user := User{Name:"lisi", Age:12}    log.DebugXML(user)}

设置JSON/XML的显示格局:

package mainimport log "dlog"func main()  {    type User struct {        Name     string        Age     int    }    user := User{Name:"lisi", Age:12}    log.ShowIndent(true)    log.DebugJSON(user)}

应用Output输入日志

log.Output函数能够指定任意日志前缀输入日志:

package mainimport log "dlog"func main()  {    log.Output("[SQL]", "This is SQL Message")    log.Output("[DEBUG]", "This is Debug Message")}

输入日志到文件

FileLogger是dlog提供的一种将日志输入到文件的日志类型。应用FileLogger日志类型前须要对FileLogger进行初始化,为FileLogger指定日志文件的寄存目录以及日志文件的轮换形式。
日志文件能够依照天(log.ROTATE_DAY)或小时(log.ROTATE_HOUR)进行进行轮换。

package mainimport log "dlog"func main()  {    log.InitFileLogger("./logs", log.LOG_DEBUG)    defer log.Close()    log.Debug("This is a Debug Message")    log.Info("This is a Debug Info")}

dlog为了进步日志组件的性能,采纳了基于buffer的文件输入形式,因而在零碎退出前须要调用Close()函数将buffer中的数据刷新到文件中。

敞开源码信息的输入

dlog缺省会在日志中输入源码所在的文件以及源码的行号,若不须要显示源码信息,能够应用函数:ShowCaller(show bool)来敞开源码信息的输入。

package mainimport log "dlog"func main()  {    log.InitFileLoggerHour("./logs", log.LOG_DEBUG)    log.ShowCaller(false)    defer log.Close()    log.Debug("This is a Debug Message")    log.Info("This is a Debug Info")}

性能指标

  1. 显示caller

    goos: windowsgoarch: amd64BenchmarkFileLogBenchmarkFileLog-6              983985            1079 ns/op            4 allocs/op
  2. 不显示caller

    goos: windowsgoarch: amd64BenchmarkFileLogNoCallerBenchmarkFileLogNoCaller-6       6514368        172.3 ns/op            0 allocs/op