問題
glog很好用,但是官方文檔卻很爛,對于很多參數并沒有做詳細說明,于是通過看源碼+測試,總結出以下使用方法
可選參數
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")
flag.Var(&logging.verbosity, "v", "log level for V logs")
flag.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr")
flag.Var(&logging.vmodule, "vmodule", "comma-separated list of pattern=N settings for file-filtered logging")
flag.Var(&logging.traceLocation, "log_backtrace_at", "when logging hits line file:N, emit a stack trace")
flag.String("log_dir", "", "If non-empty, write log files in this directory")
var logDir = flag.String("log_dir", "", "If non-empty, write log files in this directory")
使用技巧
- 設置logtostderr=false,alsologtostderr=true,log_dir="./log,stderrThreshold=0"時,所有的日志都會被記錄輸出到log目錄和標準輸入輸出;
- 設置logtostderr=false,alsologtostderr=false,log_dir="./log,stderrThreshold=0"時,所有的日志都會被記錄輸出到log目錄和標準輸入輸出;
- 設置logtostderr=false,alsologtostderr=false,log_dir="./log,stderrThreshold=2"時,所有的日志都會被記錄輸出到log目錄,只有error以上的日志會被輸出到標準輸入輸出;
總結
- 經過實驗發現,不管logtostderr或者alsologtostderr為何值,只要輸出的日志等級>=stderrThreshold,日志就會被輸出到標準輸出和log目錄中;
- 如果alsologtostderr=true,則日志等級<stderrThreshold的日志也會被輸出到標準輸出;