golang轻量级CLI调试日志记录工具插件kembadebug的使用
golang轻量级CLI调试日志记录工具插件kembadebug的使用
简介
kemba是一个轻量级的Go语言调试日志记录工具,灵感来源于visionmedia/debug模块。它是一个CLI工具,主要用于开发调试时的日志记录。
为什么叫kemba?
在Go语言中,"debug"通常指的是runtime/debug包。由于这个工具受到了npm模块debug的启发,作者想找一个与灵感来源相关的词。根据Google翻译,“debug"在冰岛语中被翻译为"kemba”。
使用说明
kemba日志工具通过读取DEBUG
和KEMBA
环境变量来决定是否输出日志行。日志输出到STDERR
。
当环境变量未设置时,日志工具会立即返回,不执行任何操作。
当设置环境变量值(例如DEBUG=example:*,tool:details
和/或KEMBA=plugin:fxn:start
)时,日志工具会在实例化时确定是否应启用。
完整示例
package main
import (
"time"
"github.com/clok/kemba"
)
type myType struct {
a, b int
}
// 当DEBUG或KEMBA环境变量设置为DEBUG=example:*时,kemba日志将输出到STDERR
func main() {
k := kemba.New("example:tag")
var x = []myType{
{1, 2},
{3, 4},
}
k.Printf("%#v", x)
// 输出到os.Stderr
// example:tag []main.myType{main.myType{a:1, b:2}, main.myType{a:3, b:4}} +0s
// 人为延迟以演示时间标记
time.Sleep(250 * time.Millisecond)
k.Printf("%# v", x)
k.Println(x)
// 人为延迟以演示时间标记
time.Sleep(100 * time.Millisecond)
k.Log(x)
// 所有结果都输出到os.Stderr
// example:tag []main.myType{ +XXms
// example:tag {a:1, b:2},
// example:tag {a:3, b:4},
// example:tag }
// 创建一个带有扩展标签的新日志记录器
k1 := k.Extend("1")
k1.Println("a string", 12, true)
// 输出到os.Stderr
// example:tag:1 a string +0s
// example:tag:1 int(12)
// example:tag:1 bool(true)
}
环境变量说明
DEBUG
和KEMBA
:用于控制日志输出的环境变量- 值可以是简单的正则表达式替代,其中通配符(
*
)被替换为.*
,所有项都带有^
前缀和$
后缀 - 如果项不包含通配符,则需要完全匹配
- 示例:
DEBUG=example:*:fxn
将匹配类似[example:tag1:fxn, example:tag2:fxn, example:anything:fxn, ...]
的标签
要禁用颜色,请将NOCOLOR
环境变量设置为任何值。
开发说明
- Fork clok/kemba仓库
- 使用go >= 1.16
- 创建分支并编码
- 运行linters:
golangci-lint run
- 使用Conventional Commit提交
- 发起PR
更多关于golang轻量级CLI调试日志记录工具插件kembadebug的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang轻量级CLI调试日志记录工具插件kembadebug的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang轻量级CLI调试日志记录工具kembadebug使用指南
kembadebug是一个轻量级的Golang CLI调试日志记录工具,特别适合命令行应用程序的开发和调试。下面我将详细介绍它的使用方法和示例代码。
安装
go get github.com/keminar/anyproxy/utils/kembadebug
基本使用
初始化
package main
import (
"github.com/keminar/anyproxy/utils/kembadebug"
)
func main() {
// 初始化调试日志,设置日志级别为Debug
kembadebug.Init(true, false)
// 你的应用代码...
}
日志级别
kembadebug支持多种日志级别:
func main() {
kembadebug.Init(true, false) // 第一个参数控制Debug级别,第二个控制Trace级别
// Debug级别日志
kembadebug.Debug("这是一条Debug日志")
// Info级别日志
kembadebug.Info("这是一条Info日志")
// Warning级别日志
kembadebug.Warning("这是一条Warning日志")
// Error级别日志
kembadebug.Error("这是一条Error日志")
// Trace级别日志(更详细的调试信息)
kembadebug.Trace("这是一条Trace日志")
}
高级功能
条件日志记录
func processData(data string) {
// 只有在Debug模式启用时才会记录
kembadebug.Debug("处理数据: %s", data)
if len(data) > 100 {
kembadebug.Warning("数据长度超过100字符")
}
}
性能追踪
func expensiveOperation() {
defer kembadebug.TraceTime("expensiveOperation")()
// 耗时操作...
time.Sleep(2 * time.Second)
}
自定义输出
func main() {
// 自定义输出到文件
file, err := os.Create("debug.log")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 设置自定义输出
kembadebug.SetOutput(file)
// 现在所有日志将写入文件
kembadebug.Info("这条日志会写入文件")
}
完整示例
下面是一个完整的CLI应用示例,展示如何在真实项目中使用kembadebug:
package main
import (
"flag"
"os"
"time"
"github.com/keminar/anyproxy/utils/kembadebug"
)
func main() {
// 解析命令行参数
debug := flag.Bool("debug", false, "启用调试模式")
trace := flag.Bool("trace", false, "启用跟踪模式")
flag.Parse()
// 初始化调试日志
kembadebug.Init(*debug, *trace)
// 示例操作
kembadebug.Info("应用程序启动")
processUserInput(flag.Args())
kembadebug.Info("应用程序结束")
}
func processUserInput(args []string) {
defer kembadebug.TraceTime("processUserInput")()
if len(args) == 0 {
kembadebug.Warning("没有提供输入参数")
return
}
kembadebug.Debug("处理输入参数: %v", args)
// 模拟处理
for i, arg := range args {
kembadebug.Trace("处理参数 %d: %s", i, arg)
time.Sleep(100 * time.Millisecond)
}
kembadebug.Info("成功处理了 %d 个参数", len(args))
}
最佳实践
- 生产环境:在生产环境中,通常只启用Error和Warning级别
- 开发环境:可以启用Debug级别
- 问题排查:临时启用Trace级别获取更详细的信息
- 性能敏感代码:使用
defer kembadebug.TraceTime()
来测量函数执行时间
与其他日志库比较
kembadebug相比标准库log或zap等日志库的优势:
- 更轻量级
- 专门为CLI应用优化
- 简单的日志级别控制
- 内置性能追踪功能
总结
kembadebug是一个简单实用的Golang调试日志工具,特别适合命令行应用的开发。通过灵活的日志级别控制和简洁的API,它可以帮助开发者快速定位问题,同时保持生产环境的日志干净整洁。
希望这个指南能帮助你有效地使用kembadebug来提升你的Golang CLI应用的开发效率!