Go Engineering - Foundation - CLI
CLI
Cobra 很好地集成了 Pflag 和 Viper
工具包
用途
Pflag
命令行参数解析
Viper
配置文件解析
Cobra
命令行框架
Pflag
Pflag 通过创建 Flag 和 FlagSet 来使用,使用 Pflag 的开源项目:Kubernetes、Istio、Helm、Docker、Etcd
Flag
一个命令行参数会被解析成一个 Flag 类型的变量
1234567891011121314// A Flag represents the state of a flag.type Flag struct { Name string // name as it appears on command line Shorthand string // one-letter abbreviated flag Usage string // help message V ...
Go Engineering - Foundation - Log - Package
开源日志包标准库 log 包
标准库自带,无需安装
只提供 Print、Panic、Fatal 函数用于日志输出
Go 标准库大量使用了该 log 包
glog
Kubernetes 使用的 klog 是基于 glog 进行封装
Google 推出的轻量级日志包
特性
支持 4 种日志级别: Info、Warning、Error、Fatal
支持命令行选项
支持根据文件大小切割日志文件
支持日志按级别分类输出
支持 V level – 开发者自定义日志级别
支持 vmodule – 开发者对不同的文件使用不同的日志级别
支持 traceLocation – 打印指定位置的栈信息
logrus
Github star 数量最多的日志包,Docker 和 Prometheus 也在使用 logrus
支持常用的日志级别
可扩展:允许使用者通过 Hook 的方式,将日志分发到任意地方
支持自定义的日志格式:内置支持 JSON 和 TEXT
结构化日志记录:Field 机制允许使用者自定义字段
预设日志字段:Default Field 机制,可以给一部分或者全部日志统一添加共同的日志字段
Fa ...
Go Engineering - Foundation - Log - Design
功能需求基础功能
支持基本的日志信息:时间戳、文件名、行号、日志级别、日志内容
支持不同的日志级别:Trace(可选)、Debug、Info、Warn、Error、Panic(可选)、Fatal
期望级别:glog.Info("This is info message")
开关级别:glog -v=4,只有日志级别高于等于 4 的日志才会被打印
支持自定义配置:不同的运行环境,需要不同的日志输出配置,在不重新编译代码的情况下,改变记录日志的行为
支持输出到标准输出(实时读取)和本地文件(采集索引)
高级功能
支持多种日志格式:TEXT、JSON
按日志级别分类输出:至少 Error 级别的日志输出到独立的文件中
支持结构化日志:使用 JSON 或者其它编码方式使日志结构化
支持日志轮转:借助 Linux Logrotate 来完成,不在日志包中实现
具备 Hook 能力
例如:当 Error 级别的日志产生时,发送邮件或者调用告警接口进行告警
日志告警的最佳方案:通过旁路功能,将日志采集到第三方组件(如 ES),日志包功能应尽量内聚
1234567891011121314 ...