文章目錄
- 深入理解 GLOG_minloglevel 與 GLOG_v:原理與使用示例
- 1. GLOG_minloglevel:最低日志等級控制
- 2. GLOG_v:控制 VLOG() 的詳細輸出等級
- 3. GLOG_minloglevel 與 GLOG_v 的優先級關系
- 4. 使用示例
- 4.1 基礎示例:不同日志等級
- 4.2 VLOG 詳細日志示例
- 5. 小結
深入理解 GLOG_minloglevel 與 GLOG_v:原理與使用示例
在使用 Google 的 glog
日志庫時,兩個非常重要的參數是 GLOG_minloglevel
和 GLOG_v
。雖然它們看似類似,都與日志輸出控制有關,但實際上作用范圍和優先級是不同的。
本文將帶你深入理解它們的區別、優先級以及如何正確使用,并給出實用示例。
1. GLOG_minloglevel:最低日志等級控制
GLOG_minloglevel
決定了日志的最低輸出等級,低于這個等級的日志將不會被打印。
-
可選值:
值 日志等級 說明 0 INFO 信息(默認值) 1 WARNING 警告 2 ERROR 錯誤 3 FATAL 致命錯誤 -
作用:
比如,當設置GLOG_minloglevel=2
時,INFO
和WARNING
等級的日志將不會輸出,只輸出ERROR
和FATAL
日志。 -
示例:
./your_program --minloglevel=1
只輸出
WARNING
、ERROR
和FATAL
日志。
2. GLOG_v:控制 VLOG() 的詳細輸出等級
GLOG_v
用于控制VLOG(n) 日志的輸出詳細程度。
-
默認值:
0
-
作用:
只有當GLOG_v >= n
時,VLOG(n)
這條日志才會被輸出。舉例來說:
- 設置
GLOG_v=1
,則VLOG(0)
和VLOG(1)
會輸出,VLOG(2)
則不會。 - 設置
GLOG_v=3
,則VLOG(0)
~VLOG(3)
的日志都會輸出。
- 設置
-
示例:
./your_program --v=2
會輸出
VLOG(0)
、VLOG(1)
和VLOG(2)
。
3. GLOG_minloglevel 與 GLOG_v 的優先級關系
-
先判斷 GLOG_minloglevel
如果當前日志級別低于GLOG_minloglevel
,直接丟棄,不管GLOG_v
設置是多少。 -
再判斷 GLOG_v
VLOG(n)
日志是INFO
級別的日志,因此只有在GLOG_minloglevel <= 0
時,VLOG(n)
才有可能輸出。 -
總結表格:
GLOG_minloglevel GLOG_v 是否輸出 VLOG(n) 日志 0(默認) 任意值 可以輸出(根據 v 等級) 1 任意值 不輸出(INFO 被屏蔽) 2 任意值 不輸出 3 任意值 不輸出
4. 使用示例
4.1 基礎示例:不同日志等級
#include <glog/logging.h>int main(int argc, char* argv[]) {google::InitGoogleLogging(argv[0]);LOG(INFO) << "普通信息日志"; // INFO 級別LOG(WARNING) << "警告信息"; // WARNING 級別LOG(ERROR) << "錯誤信息"; // ERROR 級別// LOG(FATAL) << "致命錯誤"; // 程序會在輸出后終止return 0;
}
運行:
./your_program --minloglevel=1
輸出:
WARNING: 警告信息
ERROR: 錯誤信息
(INFO 被屏蔽)
4.2 VLOG 詳細日志示例
#include <glog/logging.h>int main(int argc, char* argv[]) {google::InitGoogleLogging(argv[0]);VLOG(0) << "VLOG 詳細等級 0";VLOG(1) << "VLOG 詳細等級 1";VLOG(2) << "VLOG 詳細等級 2";return 0;
}
運行:
./your_program --minloglevel=0 --v=1
輸出:
VLOG 詳細等級 0
VLOG 詳細等級 1
(VLOG(2)
不輸出,因為 v=1
)
如果設置:
./your_program --minloglevel=1 --v=3
則不會有任何 VLOG 輸出,因為 minloglevel=1
已經屏蔽了 INFO 日志(包括 VLOG)。
5. 小結
- GLOG_minloglevel 控制輸出日志的最低級別。
- GLOG_v 控制
VLOG(n)
級別日志的詳細程度。 - 優先級:
GLOG_minloglevel
優先于GLOG_v
。 - 開發調試時,建議設置
--minloglevel=0 --v=2
以獲取較詳細的調試信息。 - 正式發布時,通常設置
--minloglevel=1
或更高,關閉低優先級日志輸出。