Go语言如何实现类似Unix工具的多-v增量式verbosity级别设置?
实现Go语言中多
-v开关的日志级别设置 很多Unix工具支持通过多次使用-v开关设置日志详细程度,比如-v对应级别1,-vv或-v -v对应级别2。我之前用Perl的时候,靠Getopt::Long的GetOptions ('verbose+' => \$verbose);就能轻松实现,但刚接触Go时没找到合适的方法,只能用-v搭配整数值(比如-v 2)来设置。后来我选择了一个第三方库来简化实现——urfave CLI v2。
用urfave CLI v2实现多-v开关
1. 安装库
先通过go get安装该库:
go get github.com/urfave/cli/v2
2. 编写实现代码
通过给IntFlag开启Count模式,就能实现每次遇到-v(或--verbose)就自动累加日志级别:
package main import ( "fmt" "os" "github.com/urfave/cli/v2" ) func main() { var verbose int app := &cli.App{ Flags: []cli.Flag{ &cli.IntFlag{ Name: "verbose", Aliases: []string{"v"}, Usage: "设置日志详细程度,多次使用可提高级别(如-vv对应级别2)", Count: true, // 核心配置:开启计数,每触发一次flag数值+1 }, }, Action: func(c *cli.Context) error { verbose = c.Int("verbose") fmt.Printf("当前日志级别:%d\n", verbose) // 根据级别执行对应日志逻辑 switch verbose { case 1: fmt.Println("[INFO] 基础日志输出") case 2: fmt.Println("[DEBUG] 详细日志输出") case 3: fmt.Println("[TRACE] 调试级日志输出") default: fmt.Println("[WARN] 默认日志输出") } return nil }, } if err := app.Run(os.Args); err != nil { fmt.Fatal(err) } }
3. 测试运行
编译后执行不同参数即可看到效果:
# 默认级别0 ./demo-app # 级别1 ./demo-app -v # 级别2 ./demo-app -vv # 等价写法 ./demo-app -v -v
内容的提问来源于stack exchange,提问作者Skeeve
相关产品推荐
相关产品推荐

