【开源推荐】基于 Go 语言的轻量级高性能日志库 logit使用及测评

mob604756f23a7e · · 789 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

前言

logit 是一个简单易用并且是基于级别控制的日志库,可以应用于所有的 GoLang 应用程序中。

开源地址:gitee.com/FishGoddess/logit

图片核心特性

  • 独特的日志输出模块设计,使用 wrapper 和 handler 装载特定的模块,实现扩展功能

  • 支持日志级别控制,一共有四个日志级别,分别是 debug,info,warn 和 error。

  • 支持日志记录函数,使用回调的形式获取日志内容,对长日志内容的组织逻辑会更清晰

  • 支持开启或者关闭日志功能,线上环境可以关闭或调高日志级别

  • 支持记录日志到文件中,并且可以自定义日志文件名

  • 支持按照时间间隔进行自动划分日志文件,比如每一天划分一个日志文件

  • 支持按照文件大小进行自动划分日志文件,比如每 64 MB 划分一个日志文件

  • 增加日志处理器模块,支持用户自定义日志处理逻辑,具有很高的扩展能力

  • 支持不输出文件信息,避免 runtime.Caller 方法的调用,具有很高的性能

  • 支持调整时间格式化输出,让用户自定义时间输出的格式

部署方式

需要依赖于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 的调用上。目前正在思考优化方案,或许会在之后的版本中解决!



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mob604756f23a7e

查看原文:【开源推荐】基于 Go 语言的轻量级高性能日志库 logit使用及测评

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

789 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传