2017-08-10 160 views
0

我在我的應用程序中創建C++庫模塊。要做日誌記錄,我使用spdlog。但在生產環境中,我不希望我的lib模塊執行任何日誌記錄。實現開/關的方法之一將是垃圾我的代碼使用#ifdef來條件語句像...如何在代碼中啓用/禁用spdlog日誌記錄?

#ifdef logging 
    // call the logger here. 
#endif 

我正在尋找一種方式,以避免寫這些條件語句。可能是一個包裝函數,執行#ifdef檢查並寫入它。但是,這種方法的問題是,我必須寫爲每個測井方法包裝(如信息,例如,跟蹤,警告,錯誤,...)

有沒有更好的辦法?

+1

退房https://github.com/gabime/spdlog/wiki/1.-QuickStart#debugtrace-macros –

回答

1

我不知道spdlog。

但是,您可以在您使用常見的一種定義一個宏包含文件,以取代沒什麼logcall,或爲空內聯函數,編譯器優化器將消除通話。

在 「app.h」

#ifndef LOG 

#ifdef logging 
#define LOG spdlog 
#endif 

#ifndef logging 
#define LOG noop 
#endif 

#endif 

你明白我的意思?

這讓大部分代碼不變

+0

是,THX的。正如我檢查,它適用於普通的功能。但是,如果spdlog是一個具有trace(),info()等成員fns的類,它不會編譯。 –

+0

我認爲這種方法也應該適用於課堂。請記錄你目前的代碼是怎樣的。也許我或其他人以其他方式提供給你 –