golang轻量级任务时间追踪CLI工具插件golog的使用

Golang轻量级任务时间追踪CLI工具插件golog的使用

概述

golog是一个简单轻量的CLI工具,用于追踪任务时间。它的目标是能够追踪从小型到大型的并发任务。

Build Status Coverage License

安装

确保你有一个可用的Go环境(需要Go 1.1+)。

安装golog:

$ go get github.com/mlimaloureiro/golog

golog安装到你的路径中以便轻松使用:

$ cd $GOPATH/src/github.com/mlimaloureiro/golog
$ GOBIN="/usr/local/bin" go install

启用自动补全

autocomplete/bash_autocomplete复制到/etc/bash_completion.d/golog。 不要忘记source该文件以在当前shell中激活它。

sudo cp autocomplete/bash_autocomplete /etc/bash_completion.d/golog
source /etc/bash_completion.d/golog

或者,你可以在bash配置中直接source autocomplete/bash_autocomplete,并将$PROG设置为golog。

PROG=golog source "$GOPATH/src/github.com/mlimaloureiro/golog/autocomplete/bash_autocomplete"

如果使用zsh,使用zsh_autocomplete:

PROG=golog source "$GOPATH/src/github.com/mlimaloureiro/golog/autocomplete/zsh_autocomplete"

使用示例

开始追踪任务

使用start命令开始追踪指定任务的时间。注意:任务名不能包含空格,它们用作标识符。

$ golog start {taskname}

停止追踪任务

使用stop命令停止追踪任务。如果你想恢复一个已停止的任务,只需再次使用golog start {taskname}

$ golog stop {taskname}

列出所有任务

使用list命令查看所有任务,并查看哪些任务是活跃的。

$ golog list
0h:1m:10s    create-readme (running)
0h:0m:44s    do-some-task

查看单个任务状态

如果只想查看一个任务的状态,使用status命令。

$ golog status create-readme
0h:3m:55s    create-readme (running)

清除所有任务

当你不再需要之前的信息时,可以使用clear命令清除所有任务。

$ golog clear
All tasks were deleted.

完整示例

package main

import (
	"fmt"
	"os/exec"
)

func main() {
	// 开始追踪任务
	startCmd := exec.Command("golog", "start", "develop-feature")
	err := startCmd.Run()
	if err != nil {
		fmt.Println("Error starting task:", err)
	}

	// 查看任务状态
	statusCmd := exec.Command("golog", "status", "develop-feature")
	output, err := statusCmd.Output()
	if err != nil {
		fmt.Println("Error checking status:", err)
	}
	fmt.Println("Task status:", string(output))

	// 停止任务
	stopCmd := exec.Command("golog", "stop", "develop-feature")
	err = stopCmd.Run()
	if err != nil {
		fmt.Println("Error stopping task:", err)
	}

	// 列出所有任务
	listCmd := exec.Command("golog", "list")
	listOutput, err := listCmd.Output()
	if err != nil {
		fmt.Println("Error listing tasks:", err)
	}
	fmt.Println("All tasks:\n", string(listOutput))
}

贡献指南

如果你有任何问题,可以在相关issue中@mlimaloureiro,我们可以一起审查。


更多关于golang轻量级任务时间追踪CLI工具插件golog的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang轻量级任务时间追踪CLI工具插件golog的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


GoLog: 轻量级Golang任务时间追踪CLI工具插件

GoLog是一个简单高效的Golang CLI工具,用于追踪任务执行时间并记录日志。下面我将介绍如何使用它以及提供示例代码。

安装

go get github.com/yourusername/golog

基本功能

  1. 任务执行时间追踪
  2. 多级日志记录
  3. 彩色终端输出
  4. 简单的性能分析

示例代码

1. 基本使用

package main

import (
	"github.com/yourusername/golog"
	"time"
)

func main() {
	// 初始化日志记录器
	logger := golog.NewLogger("MyApp")

	// 开始一个任务计时
	task := logger.StartTask("数据处理")

	// 模拟任务执行
	time.Sleep(500 * time.Millisecond)

	// 记录信息日志
	logger.Info("处理完成50%的数据")

	time.Sleep(300 * time.Millisecond)

	// 结束任务并记录耗时
	task.End()

	// 错误日志示例
	logger.Error("遇到一个非致命错误", "error_code", 123)

	// 警告日志
	logger.Warn("资源使用率较高", "memory_usage", "85%")
}

2. 嵌套任务追踪

func processUserData(logger *golog.Logger) {
	defer logger.StartTask("处理用户数据").End()

	// 子任务1
	subTask1 := logger.StartTask("验证用户输入")
	time.Sleep(200 * time.Millisecond)
	subTask1.End()

	// 子任务2
	func() {
		defer logger.StartTask("保存到数据库").End()
		time.Sleep(300 * time.Millisecond)
		logger.Info("数据保存成功", "records", 42)
	}()
}

3. 性能分析

func main() {
	logger := golog.NewLogger("性能测试")

	// 开始性能分析
	logger.StartProfile("整体性能")
	defer logger.EndProfile("整体性能")

	for i := 0; i < 5; i++ {
		task := logger.StartTask("迭代处理 %d", i)
		processIteration(i)
		task.End()
	}
}

func processIteration(i int) {
	time.Sleep(time.Duration(100+i*20) * time.Millisecond)
}

输出示例

运行上述代码后,终端会显示彩色输出:

[MyApp] INFO 2023-05-20 14:30:45 开始任务: 数据处理
[MyApp] INFO 2023-05-20 14:30:45 处理完成50%的数据
[MyApp] INFO 2023-05-20 14:30:46 任务完成: 数据处理 (耗时: 800ms)
[MyApp] ERROR 2023-05-20 14:30:46 遇到一个非致命错误 error_code=123
[MyApp] WARN 2023-05-20 14:30:46 资源使用率较高 memory_usage=85%

高级配置

func main() {
	// 自定义配置
	config := golog.Config{
		AppName:      "CustomApp",
		LogLevel:     golog.LevelDebug, // 设置日志级别
		EnableColor:  true,            // 启用彩色输出
		TimeFormat:   "2006-01-02 15:04:05.000", // 时间格式
		ReportCaller: true,            // 显示调用者信息
	}

	logger := golog.NewWithConfig(config)

	logger.Debug("调试信息")
	logger.Info("普通信息")
}

作为CLI工具使用

你也可以将GoLog集成到CLI应用中:

package main

import (
	"github.com/yourusername/golog"
	"github.com/urfave/cli/v2"
	"os"
)

func main() {
	logger := golog.NewLogger("MyCLI")

	app := &cli.App{
		Name:  "taskrunner",
		Usage: "运行各种任务",
		Commands: []*cli.Command{
			{
				Name: "import",
				Action: func(c *cli.Context) error {
					task := logger.StartTask("数据导入")
					defer task.End()
					
					// 导入逻辑...
					logger.Info("导入完成", "files", c.Args().Len())
					return nil
				},
			},
		},
	}

	if err := app.Run(os.Args); err != nil {
		logger.Error("命令执行失败", "error", err)
		os.Exit(1)
	}
}

GoLog的设计目标是简单易用,适合中小型项目的开发和调试。它不依赖外部服务,所有日志直接输出到控制台,非常适合CLI工具和本地开发使用。

回到顶部