很不错的日志包glog使用介绍
发布时间:2020-12-16 18:44:04 所属栏目:大数据 来源:网络整理
导读:Go语言自带的log模块已经很不错了,但实际使用时,会要求做得更细更规范些。 glog是Google开源日志库C++ glog的Go语言精简版,很小才两个文件。 它通过在命令行设置标志参数的方式来控制日志记录行为。 线程安全,atomic操作,性能很高。 支持分级(INFO/WARNING/ER
Go语言自带的log模块已经很不错了,但实际使用时,会要求做得更细更规范些。
glog是Google开源日志库C++ glog的Go语言精简版,很小才两个文件。 它通过在命令行设置标志参数的方式来控制日志记录行为。 线程安全,atomic操作,性能很高。 支持分级(INFO/WARNING/ERROR/FATAL)。 可以设置按级别或条件来记录日志。 可以查看指定行的运行时堆栈信息。 所支持的参数: flag.String("log_dir","","If non-empty,write log files in this directory") 日志输出目录 flag.BoolVar(&logging.toStderr,"logtostderr",false,"log to standard error instead of files") logtostderr值为true的时候,日志信息输出到stderr。默认值为 false。 flag.BoolVar(&logging.alsoToStderr,"alsologtostderr","log to standard error as well as files") alsologtostderr值为true的时候,日志信息同时输出到stderr及文件。默认值为 false。 flag.Var(&logging.verbosity,"v","log level for V logs") 输出小于等于此级别的日志信息,大于此级别的不会输出 flag.Var(&logging.stderrThreshold,"stderrthreshold","logs at or above this threshold go to stderr") 严重性级别在指定级别以上的日志信息除了写入日志文件以外,还会输出到stderr。 flag.Var(&logging.vmodule,"vmodule","comma-separated list of pattern=N settings for file-filtered logging"会输出匹配表达式的.go文件中,级别小于等于N的日志 信息.不匹配表达式的文件则只会输出默认日志信息。但注意。 此选项可以被-v 参数覆盖 flag.Var(&logging.traceLocation,"log_backtrace_at","when logging hits line file:N,emit a stack trace") 指定行的运行时堆栈信息 注意事项: 1. 因为是使用时依参数配置,所以需在main()中加上flag.Parse() 2. 需在结尾加上glog.Flush() 3. 依级别生成不同的日志文件,但级别高的日志信息会同时在级别低的日志文件中输出
产生的日志文件命令规则如下: main.exe.XCL-PC.XCL-PC_XCL.log.WARNING.20150326-144521.10452程序名称.电脑名称.当前用户名.log.日志级别.YYYYMMDD-HHMMSS.pid号
program,host,userName,tag,t.Year(),t.Month(),t.Day(),t.Hour(),t.Minute(),t.Second(),pid 附测试用文件: //glog使用例子 //glog: https://github.com/golang/glog //author: Xiong Chuan Liang //date: 2015-3-26 package main import ( "flag" "glog" "os" "test" ) func main() { flag.Parse() p,err := os.Getwd() if err != nil { glog.Info("Getwd: ",err) } else { glog.Info("Getwd: ",p) } glog.Info("Prepare to repel boarders") glog.Info("222222222222---log_backtrace_at") glog.Info("333333333333") glog.V(1).Infoln("Processed1","nItems1","elements1") glog.V(2).Infoln("Processed2","nItems2","elements2") glog.V(3).Infoln("Processed3","nItems3","elements3") glog.V(4).Infoln("Processed4","nItems4","elements4") glog.V(5).Infoln("Processed5","nItems5","elements5") glog.Error("errrrr") /* if glog.V(2) { glog.Info("Starting transaction...") } glog.V(2).Infoln("Processed","nItems","elements") ch := make(chan int) go func() { for i := 0; i < 100; i++ { glog.Info("info:",i) } ch <- 1 }() <-ch glog.Fatalf("Initialization failed: %s",errors.New("test info")) */ test.TestVmodule() exit() } func exit() { glog.Flush() } package test import ( "glog" ) func TestVmodule() { glog.Info("test() 222222222222---log_backtrace_at") glog.Info("test() 333333333333") glog.V(1).Infoln("test() Processed1","test() elements1") glog.V(2).Infoln("test() Processed2","test() elements2") glog.V(3).Infoln("test()Processed3","test() elements3") glog.V(4).Infoln("test()Processed4","test() elements4") }附部份测试命令: go run main.go -log_dir=./ -log_dir=./ -v 5 go run main.go -log_dir=./ -alsologtostderr=true -log_backtrace_at=main.go:26 // vmodule 会输出main.go文件,级别小于等于2的日志信息 go run main.go -log_dir=./ -alsologtostderr=true -vmodule=main*=2 //会输出test.go级别小于等于2的日志信息,其它文件则不会 go run main.go -log_dir=./ -alsologtostderr=true -vmodule=test*=2 go run main.go -log_dir=./ -alsologtostderr=true -vmodule=test*=2 -v=3 go run main.go -log_dir=./ -stderrthreshold=ERROR 这东西比C++版本用起来方便多了,功能也很不错,生产环境可以用用看。
MAIL : xcl_168@aliyun.com BLOG: http://blog.csdn.net/xcl168 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |