我寫了這個logger。它工作正常,但有一些我無法做到的事情。如何刷新日誌消息並在C++中自動解鎖互斥鎖?
uLOG(warning) << "Test log message " << 123 << uLOGE;
uLOG鎖定C++ 11互斥鎖並開始在文件流上寫入。
uLOGE刷新流並解鎖互斥鎖。
我想這個語法來獲得相同的結果:
uLOG(warning) << "Test log message " << 123;
所以我想沖洗和解鎖自動在該行的末尾被調用。
這是一種可行的方法嗎?
- 我嘗試設置
ios::unitbuf
標誌,但是這迫使每一個<<
操作沖洗,不理想的一個SSD穿着。它並沒有解開互斥鎖。 - 我試圖確定在ULOG一個臨時對象,它的析構函數將刷新和解鎖,但力量放在它自己的代碼塊中的日誌行:
{ uLOG(warning) << 123; }
第二個例子中的大括號不是必須的,你爲什麼認爲它們是? :)這可能是真正的問題 – OMGtechy
@OMGtechy:我把大括號,以便臨時對象超出範圍和其析構函數被調用。 – Pietro