golang轻量级CLI调试日志记录工具插件kemba的使用

golang轻量级CLI调试日志记录工具插件kemba的使用

什么是kemba

kemba是一个受debug日志工具启发的Golang轻量级CLI调试日志记录工具。它的名字来源于冰岛语中"debug"的翻译"kemba"。

功能特点

  • 通过DEBUGKEMBA环境变量控制日志输出
  • 输出到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)
}

环境变量配置

  • DEBUGKEMBA: 设置日志标签匹配模式
    • 示例: 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): 扩展当前标签创建新logger
  • Printf(format string, v ...interface{}): 格式化输出
  • Println(v ...interface{}): 打印变量
  • Log(v ...interface{}): 记录变量(更友好的格式化)

kemba示例输出


更多关于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")
}

最佳实践

  1. 命名空间:为不同的模块使用不同的命名空间(通过Extend方法)
  2. 适度使用:只在真正需要调试信息的地方使用
  3. 生产环境:确保在生产环境中禁用调试日志
  4. 结构化日志:对复杂数据使用JSON方法
  5. 性能考虑:频繁的日志调用可能影响性能,必要时使用条件判断

Kemba是一个简单但功能强大的工具,特别适合需要轻量级调试解决方案的CLI应用程序。它的嵌套命名空间和颜色支持使得调试复杂应用程序变得更加容易。

回到顶部