一、关于glog库
glog
Lmmdd hh:mm:ss.uuuuuu threadid file:line] msgLInfoL
安装glog:
1 |
go get github.com/golang/glog |
1.1 基本用法
flag
1 |
flag.Parse() |
bufferglog.Flush()
1 |
defer glog.Flush() |
-log_dir
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package main import ( "flag" "github.com/golang/glog" ) func main() { flag.Parse() defer glog.Flush() glog.Info("HelloWorld") } |
编译后执行:
1 |
./glog -log_dir=log |
在log目录下会生成相应的日志文件,查看对应的日志:
打印到标准输出
默认情况下,日志不是打印到标准输出中,如需打印到标准输出可以使用以下两个参数:
logtostderralsologtostderr
这两个参数都会把日志打印到标准错误中(在linux终端环境下,前台显示的标准错误和标准输出可以认为是同一个输出),调试日志时可以加上这两个参数中的任一:
二、日志级别
v levelv module
2.1 打印特定级别的日志
使用方法:
1 |
glog.V(n).Info("Log message") |
nn-v=x
1 2 3 4 5 6 7 |
func main() { flag.Parse() defer glog.Flush() glog.V(3).Info("Level 3 log") glog.V(5).Info("Level 5 log") } |
执行时设定日志级别为4,日志将不会打印出第二条级别为5的日志:
1 |
./glog -v=4 -log_dir=log |
日志:
1 2 3 4 5 |
Log file created at: 2019/09/08 18:04:55 Running on machine: maqianos Binary: Built with gc go1.10.4 for linux/amd64 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0908 18:04:55.924127 546 main.go:12] Level 3 log |
2.2 vmodule选项
vmodule选项可以在上面设定v level之后,单独再给某个文件设置日志级别,适用于以下场景:
- 系统默认日志级别为3,但是希望main.go中的日志级别为5
./glog -v=4 -log_dir=log -vmodule=main=5
1 2 3 4 5 6 |
Log file created at: 2019/09/08 18:11:36 Running on machine: maqianos Binary: Built with gc go1.10.4 for linux/amd64 Log line format: [IWEF]mmdd hh:mm:ss.uuuuuu threadid file:line] msg I0908 18:11:36.096301 557 main.go:12] Level 3 log I0908 18:11:36.100119 557 main.go:13] Level 5 log |
三、自定义修改
3.1 修改日志WARN为DEBUG
glog.go
1 2 3 4 5 6 7 8 |
const severityChar = "IWEF" // 改为"IDEF" var severityName = []string{ infoLog: "INFO", warningLog: "WARN" // 改为"DEBUG", errorLog: "ERROR", fatalLog: "FATAL", } |
这里实现简单,改起来也简单。
3.2 默认打印到标准错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// 搜索函数init func init() { // 注释掉下面两行 //flag.BoolVar(&logging.toStderr, "logtostderr", false, "log to standard error instead of files") //flag.BoolVar(&logging.alsoToStderr, "alsologtostderr", false, "log to standard error as well as files") // 添加下面两行 logging.alsoToStderr = false logging.toStderr = true // Default stderrThreshold is ERROR. logging.stderrThreshold = errorLog logging.setVState(0, nil, false) go logging.flushDaemon() } |