使用Cobra构建Go CLI时,如何禁用或重定向zk第三方库的控制台日志?
解决Go zk包控制台日志干扰的方法
重定向标准日志输出
zk包默认用Go标准log包打日志,如果你自己只靠fmt输出内容,可以直接把log的输出定向到空设备:import ( "io" "log" "github.com/samuel/go-zookeeper/zk" ) func init() { // 让log包的输出直接丢弃,zk的日志就不会显示在控制台了 log.SetOutput(io.Discard) }注意:如果你的代码里也用到
log包打日志,这个方法会把你的日志也屏蔽掉,只适合完全用fmt的场景。给zk设置自定义空日志器
主流的samuel/go-zookeeper/zk支持自定义日志接口,你可以写一个空实现的日志器接管zk的日志:import ( "github.com/samuel/go-zookeeper/zk" ) // 实现zk要求的Logger接口,但所有方法什么都不做 type silentZKLogger struct{} func (l silentZKLogger) Printf(format string, v ...interface{}) {} func (l silentZKLogger) Print(v ...interface{}) {} func (l silentZKLogger) Println(v ...interface{}) {} func main() { // 把zk的日志器换成我们的空实现 zk.SetLogger(silentZKLogger{}) // 接下来正常初始化zk客户端即可 }这个方法最精准,只会屏蔽zk的日志,不影响你自己用
fmt输出内容。编译时禁用日志(如果支持)
部分zk客户端版本支持通过编译标签关闭日志功能,你可以先查看zk库的源码,找有没有类似nolog的编译标签。如果有,编译时加上标签:go build -tags nolog ./你的CLI项目路径这个方法需要依赖zk库的具体实现,不是所有版本都支持。
内容的提问来源于stack exchange,提问作者user18160597
相关产品推荐
相关产品推荐

