2011-11-30 101 views
0

我正在爲數據庫引擎開發基於磁盤的樹,並且我喜歡爲我的程序維護一個日誌文件。我基本上需要日誌程序的兩種功能。它必須允許我將消息記錄到日誌文件中,並且還必須寫入任何將它作爲參數傳遞到日誌文件的變量。我只需要這兩個功能。第一個實現相當簡單,但我很難實現第二個。我想將任何類型的任意數量的參數傳遞給日誌程序,將它寫入日誌文件。我嘗試使用變量參數函數來實現第二個函數,但問題是我們必須知道正在傳遞的變量的類型。我相信肯定有辦法做到這一點。任何人都可以啓發我嗎?在C++中實現最小化日誌記錄程序

+0

你是否也想過爲每個傳遞的變量傳遞第二個參數,該變量包含變量的類型? –

+0

你如何計劃記錄一個任意類型的變量?這組可能的類型是否有任何限制?例如,他們是否必須有'ostream&operator <<(ostream&,T)'超載? – Useless

回答

1

log4C++提供您正在查找的功能。

如果這對你來說太重了,你可以使用模板做類似的事情。喜歡的東西:

class log 
{ 
private: 
    std::ostream& stream; 

public: 
    log(std::ostream& src) : stream(src) {} 

... 

    std::ostream& getStream() { return stream; } 
} 

template <typename T> log& operator<<(log&, const T& val) 
{ 
    log.getStream() << val; 
    return log; 
}

這裏log::stream是您爲輸出定義爲一個文件,到控制檯或任何部分std::ostream實例。您可以通過區分不同類型的日誌記錄事件來讓它更有趣。

0

看一看這個簡單的日誌系統從DOBS博士的文章的實現:http://drdobbs.com/cpp/201804215

它是基於模板的,有日誌記錄級別(不運行時發生的任何開銷,如果不需要的話)和是小