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

PHP是最好的 2020-03-17 13:10:29 ⋅ 730 阅读

前言

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



全部评论: 0

    我有话说:

    Excelize -Go 开源项目中唯一支持复杂样式 XLSX 文件

    Go 语言编写一个用来操作 Office Excel 文档类

    开源推荐」Nginx可视化配置工具—NginxWebUI,小白也可以玩转

    包括http协议转发, tcp协议转发, 反向代理, 负载均衡, ssl证书自动申请、续签、配置等

    Go语言社区系统 bbs-go 3.2.0 版本发布,支持基于 Elasticsearch 帖子搜索

    更新内容 新功能:支持基于elasticsearch帖子搜索功能 优化:SEO优化,支持神马搜索链接推送 优化:完善数据库初始化脚本 优化:优化日志输出逻辑,日志输出到文件时同时支持输出到控制台

    滴滴开源基于 React 移动端开发组件-Pile.js

    Pile.js 是滴滴开发基于 React 移动端开发组件。 轻量,易用,包含 52 个交互功能,支持多语言与自定义皮肤。可以非常轻松创建用户交互界面,让前端开发更专注于业务逻辑实现。

    Go语言集成开发环境-GoLand 2020.3稳定版发布

    简介 GoLand 是 JetBrains 公司推出 Go 语言集成开发环境。GoLand 同样基于 IntelliJ 平台开发,支持 JetBrains 插件体系。 GoLand 2020.3

    开源资讯】GraalVM 20.3 发布,高性能语言虚拟机

    GraalVM 20.3 已发布。GraalVM 是 Oracle 打造高性能语言虚拟机,支持运行 JavaScript、Python 3、Ruby、R

    「转载」微服务分布式架构中,如何实现日志链路跟踪?

    背景 开发排查系统问题用得最多手段就是查看系统日志,在分布式环境中一般使用ELK来统一收集日志,但是在并发大时使用日志定位问题还是比较麻烦,我们来看下面图     上图

    Julia 1.6.0 发布,高性能动态高级编程语言

    Julia 1.6.0 现已发布。Julia 是一个高性能动态高级编程语言。其拥有丰富函数,提供了数字精度、精致增幅器和分布式并行运行方式。核心函数等大多数由 Julia 编写,但也用成熟

    精品推荐基于SpringBoot2.0企业级开发脚手架

    SmallBun是参考多个优秀开源项目自身学习、经验运用,高度整合封装而成高效,高性能,强安全性开源项目,内附Git源码地址

    京东技术:Protobuf-3.6.1 安装 Golang 使用

    Protobuf 是 Google 开发一种数据描述语言,能够将结构化数据序列化,可用于数据存储,通信协议等方面。官方版本支持 Go,C++,Java,Python,社区版本支持更多语言

    58技术:基于Elastic Stack海量日志分析平台实践

    背景 随着58集团业务飞速发展,日志数量也呈现指数级增长。传统日志处理方案,已不再适用,此时急需一套功能强大、稳定可靠日志处理系统。 ​为解集团燃眉之急,DB部门自2018年初着手调研解决方案

    MixGo V1.0 发布,混合型高性能 Go 框架

    Mix Go 是什么 Mix Go 是混合型高性能 Go 框架,该框架改造整合了 gin, logrus, gorm, go-redis, jwt

    基于 GraalVM PHP JIT 实现性能优于原生方案

    GraalVM 是 Oracle 打造高性能语言虚拟机,支持运行 JavaScript、Python 3、Ruby、R、基于 JVM 语言(如 Java、Scala 和 Kotlin),以及

    GraalVM 社区版 21.0.0 发布,高性能语言虚拟机

    GraalVM 社区版 21.0.0 已发布。GraalVM 是 Oracle 打造高性能语言虚拟机,支持运行 JavaScript、Python 3

    Riot 5.3.1 发布,基于组件 UI

    Riot 5.3.1 现已发布。Riot 是一个简单而优雅基于组件 UI ,为所有现代浏览器带来了自定义组件,压缩文件大小仅有 6 KB,支持 FireFox、Chrome、Edge

    Fizz Gateway 1.1.1 发布,基于 Java异步框架WebFlux开发微服务网关

    Fizz Gateway 是一个基于 Java异步框架WebFlux开发微服务网关,能够实现热服务编排、自动授权选择、线上服务脚本编码、在线测试高性能路由、API审核管理等目的,拥有强大自定义

    精品推荐:微信小程序常见UI框架/组件

    想要开发出一套高质量小程序,运用框架,组件是省时省力省心必不可少一部分,随着小程序日渐火爆,各种不同类型