前言
logit 是一个简单易用并且是基于级别控制的日志库,可以应用于所有的 GoLang 应用程序中。
开源地址:gitee.com/FishGoddess/logit
核心特性
部署方式
需要依赖于Golang 运行环境。
第一步:Go modules
$ go get -u github. com /FishGoddess/logit
可以对go.mod 文件进行直接编辑 ,然后再执行 go build 。
module your_project_name
go 1.14
require (
github.com/FishGoddess/logit v0.0.10
)
第二步:Go path
$ go get -u github.com/FishGoddess/logit
logit 没有任何其他额外的依赖,纯使用 Golang 标准库 完成。
package main
import (
"math/ rand "
"strconv"
"time"
"github.com/FishGoddess/logit"
)
func main() {
// Log as you want.
logit.Debug("I am a debug message! But I will not be logged in default level!")
logit.Info("I am an info message!")
logit.Warn("I am a warn message!")
logit.Error("I am an error message!")
// Change logger level.
logit.ChangeLevelTo(logit.DebugLevel)
// If you want to output log with file info, try this:
logit.EnableFileInfo()
logit.Info("Show file info!")
// If you have a long log and it is made of many variables, try this:
// The msg is the return value of msgGenerator.
logit.DebugFunction(func() string {
// Use time as the source of random number generator.
r := rand.New(rand.NewSource(time.Now(). Unix ()))
return "debug rand int: " + strconv.Itoa(r.Intn(100))
})
}
性能测试
$ go test -v ./_examples/benchmarks_test.go -bench=. -benchtime=1s
测试文件
下载地址:gitee.com/FishGoddess/logit/blob/master/_examples/benchmarks_test.go
测试环境:I7-6700HQ CPU @ 2.6 GHZ,16 GB RAM
备注
1. 输出文件信息会有运行时操作(runtime.Caller 方法),非常影响性能, 但是这个功能感觉还是比较实用的,尤其是在查找错误的时候,所以我们还是加了这个功能! 如果你更在乎性能,那我们也提供了一个选项可以关闭文件信息的查询!
2. v0.0.7 及以前版本的日志输出使用了 fmt 包的一些方法,经过性能检测发现这些方法存在大量使用反射的 行为,主要体现在对参数 v interface{} 进行类型检测的逻辑上,而日志输出都是字符串,这一个 判断是可以省略的,可以减少很多运行时操作时间!v0.0.8 版本开始使用了更有效率的输出方式!
3. 经过对 v0.0.8 版本的性能检测,发现时间格式化操作消耗了接近一半的处理时间, 主要体现在 time.Time.AppendFormat 的调用上。目前正在思考优化方案,或许会在之后的版本中解决!