介绍
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 main
import 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 main
import 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 main
import log "dlog"
func main() {log.Debugf("This is a %s Message", "Debug")
log.Infof("This is a %s Message", "Info")
}
输入 JSON 格局的日志:
package main
import log "dlog"
func main() {
type User struct {
Name string
Age int
}
user := User{Name:"lisi", Age:12}
log.DebugJSON(user)
}
输入 XML 格局的日志:
package main
import log "dlog"
func main() {
type User struct {
Name string
Age int
}
user := User{Name:"lisi", Age:12}
log.DebugXML(user)
}
设置 JSON/XML 的显示格局:
package main
import 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 main
import 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 main
import 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 main
import 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")
}
性能指标
-
显示 caller
goos: windows goarch: amd64 BenchmarkFileLog BenchmarkFileLog-6 983985 1079 ns/op 4 allocs/op
-
不显示 caller
goos: windows goarch: amd64 BenchmarkFileLogNoCaller BenchmarkFileLogNoCaller-6 6514368 172.3 ns/op 0 allocs/op