golang轻量级CLI调试日志记录工具插件kemba的使用
golang轻量级CLI调试日志记录工具插件kemba的使用
什么是kemba
kemba是一个受debug
日志工具启发的Golang轻量级CLI调试日志记录工具。它的名字来源于冰岛语中"debug"的翻译"kemba"。
功能特点
- 通过
DEBUG
或KEMBA
环境变量控制日志输出 - 输出到STDERR
- 支持通配符匹配日志标签
- 支持颜色输出(可通过
NOCOLOR
环境变量禁用) - 支持时间标记
- 支持日志标签扩展
安装
go get github.com/clok/kemba
使用示例
package main
import (
"time"
"github.com/clok/kemba"
)
type myType struct {
a, b int
}
// 当DEBUG或KEMBA环境变量设置为DEBUG=example:*时,kemba日志将输出到STDERR
func main() {
// 创建新的kemba日志实例,标签为"example:tag"
k := kemba.New("example:tag")
var x = []myType{
{1, 2},
{3, 4},
}
// 使用Printf输出格式化日志
k.Printf("%#v", x)
// 输出示例:
// 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)
// 输出示例:
// example:tag []main.myType{ +XXms
// example:tag {a:1, b:2},
// example:tag {a:3, b:4},
// example:tag }
// 扩展日志标签创建新logger
k1 := k.Extend("1")
k1.Println("a string", 12, true)
// 输出示例:
// example:tag:1 a string +0s
// example:tag:1 int(12)
// example:tag:1 bool(true)
}
环境变量配置
DEBUG
或KEMBA
: 设置日志标签匹配模式- 示例:
DEBUG=example:*,tool:details
*
会被转换为.*
进行正则匹配- 没有
*
的标签需要精确匹配
- 示例:
NOCOLOR
: 设置任意值可禁用颜色输出
日志标签匹配规则
example:*
: 匹配所有以"example:"开头的标签example:*:fxn
: 匹配类似"example:tag1:fxn"、"example:tag2:fxn"等标签tool:details
: 精确匹配"tool:details"标签
方法说明
New(tag string)
: 创建新的kemba日志实例Extend(extension string)
: 扩展当前标签创建新loggerPrintf(format string, v ...interface{})
: 格式化输出Println(v ...interface{})
: 打印变量Log(v ...interface{})
: 记录变量(更友好的格式化)
更多关于golang轻量级CLI调试日志记录工具插件kemba的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang轻量级CLI调试日志记录工具插件kemba的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Kemba:Golang轻量级CLI调试日志记录工具
Kemba是一个轻量级的Golang调试日志记录工具,专为CLI应用程序设计。它提供了简单直观的API来记录调试信息,同时保持输出整洁和可读性。
安装Kemba
go get github.com/clok/kemba
基本使用
package main
import (
"github.com/clok/kemba"
)
func main() {
// 创建kemba实例
k := kemba.New("myapp")
// 基本日志输出
k.Log("starting application")
// 带标签的日志
k.Extend("database").Log("connecting to db")
// 格式化日志
user := "john"
k.Extend("auth").Logf("user %s logged in", user)
// JSON输出
data := map[string]interface{}{
"name": "John Doe",
"email": "john@example.com",
}
k.Extend("api").JSON(data)
}
高级功能
1. 嵌套日志记录
func processOrder(k kemba.Kemba) {
orderK := k.Extend("order")
orderK.Log("processing order")
// 更深层次的嵌套
paymentK := orderK.Extend("payment")
paymentK.Log("processing payment")
// 输出:
// myapp:order processing order
// myapp:order:payment processing payment
}
2. 启用/禁用日志
func main() {
k := kemba.New("myapp")
// 默认启用
k.Log("this will be printed")
// 禁用所有kemba日志
kemba.Disable()
k.Log("this won't be printed")
// 重新启用
kemba.Enable()
k.Log("this will be printed again")
}
3. 条件日志
func main() {
k := kemba.New("myapp")
// 只在调试模式下记录
if debugMode {
k.Log("debug information")
}
// 或者使用kemba的内置条件
k.When(debugMode).Log("conditional debug info")
}
4. 颜色输出
Kemba支持彩色输出,使日志更易读:
func main() {
k := kemba.New("myapp").Color()
k.Log("this will be colored")
// 禁用颜色
k.NoColor()
k.Log("this will be plain text")
}
实际应用示例
package main
import (
"errors"
"github.com/clok/kemba"
)
func main() {
k := kemba.New("myapp").Color()
k.Log("application started")
err := initializeDatabase(k.Extend("db"))
if err != nil {
k.Extend("error").Log(err.Error())
return
}
processData(k.Extend("data"))
k.Log("application finished")
}
func initializeDatabase(k kemba.Kemba) error {
k.Log("initializing database connection")
// 模拟错误
if true { // 实际应用中这里会有条件判断
return errors.New("connection timeout")
}
k.Log("database initialized successfully")
return nil
}
func processData(k kemba.Kemba) {
k.Log("processing data")
for i := 0; i < 3; i++ {
k.Extend("item").Logf("processing item %d", i)
}
k.Log("data processing complete")
}
最佳实践
- 命名空间:为不同的模块使用不同的命名空间(通过Extend方法)
- 适度使用:只在真正需要调试信息的地方使用
- 生产环境:确保在生产环境中禁用调试日志
- 结构化日志:对复杂数据使用JSON方法
- 性能考虑:频繁的日志调用可能影响性能,必要时使用条件判断
Kemba是一个简单但功能强大的工具,特别适合需要轻量级调试解决方案的CLI应用程序。它的嵌套命名空间和颜色支持使得调试复杂应用程序变得更加容易。