現有ç/C++的日誌方案。原來,Pantheios可能是在我的情況最好的一些調查,這是最低的開銷,如果日誌被禁用。C/C++日誌工具調用取決於日誌級別
所有的記錄器似乎都支持某種打印日誌消息。但是,在我的情況下,我有一個函數調用,應該避免日誌記錄被禁用(因爲它非常昂貴)。
目前,我用一個很簡單的記錄設置像
#ifdef DEBUG_L1
cout << "msg 1" << endl // log level 1
#ifdef DEBUG_L2
printBuffer() // log level 2
#endif
#endif
,供應我的需要(現在),因爲我付出零開銷,如果日誌被禁用。然而,代碼很快看起來很醜,並且不太靈活。
這應該用C++記錄器來實現。如上所述,printBuffer()
的功能體非常昂貴。如果日誌記錄關閉,則可以避免調用它。
是否有可能聲明一個完整的函數調用只在高於某個日誌級別時執行?或者在這種情況下我還需要預處理器嗎?
編輯:
謝謝@BobTFish。我實際上正在考慮使用你所描述的那種設置。我想知道如何靈活地實現這種事情。通常我會記錄一組字符串和值(int
,float
和指針)。在風格
cout << "name1=" << int << " name2=" << (void*)(ptr) << endl;
現在,我真的不喜歡在此時切換到printf
的語法。宏觀方法如何處理(因爲它只用一個類參數進行模板化)?
請說明是否可以在運行時更改日誌級別(包括從配置文件讀取),而不是編譯爲 – 2016-02-01 03:05:15