#include <iostream>
#include <sstream>
enum eLogLevel { eLogLevel_INFO };
std::wstring Time2String() {
return L"now";
}
#define LOG_HELPER __FUNCTION__ << L"(): "
#define LOG_HELPER_2 L"[" << Time2String() << L"] "
inline void LogMessage(eLogLevel lvl, const std::wstringstream& str, const std::wstringstream& logHelper) {
std::wcout << static_cast<int>(lvl) << L" " << logHelper.str() << L" " << str.str() << std::endl;
}
#define LogInfo(str) { \
LogMessage(eLogLevel_INFO, \
static_cast<std::wstringstream&>(std::wstringstream() << LOG_HELPER << str), \
static_cast<std::wstringstream&>(std::wstringstream() << LOG_HELPER_2) \
); \
}
int main()
{
LogInfo(L"Test log");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KCmVudW0gZUxvZ0xldmVsIHsgZUxvZ0xldmVsX0lORk8gfTsKCnN0ZDo6d3N0cmluZyBUaW1lMlN0cmluZygpIHsKCXJldHVybiBMIm5vdyI7Cn0KCiNkZWZpbmUgTE9HX0hFTFBFUiBfX0ZVTkNUSU9OX18gPDwgTCIoKTogIgojZGVmaW5lIExPR19IRUxQRVJfMiBMIlsiIDw8IFRpbWUyU3RyaW5nKCkgPDwgTCJdICIKCmlubGluZSB2b2lkIExvZ01lc3NhZ2UoZUxvZ0xldmVsIGx2bCwgY29uc3Qgc3RkOjp3c3RyaW5nc3RyZWFtJiBzdHIsIGNvbnN0IHN0ZDo6d3N0cmluZ3N0cmVhbSYgbG9nSGVscGVyKSB7CglzdGQ6Ondjb3V0IDw8IHN0YXRpY19jYXN0PGludD4obHZsKSA8PCBMIiAiIDw8IGxvZ0hlbHBlci5zdHIoKSA8PCBMIiAiIDw8IHN0ci5zdHIoKSA8PCBzdGQ6OmVuZGw7Cn0KCiNkZWZpbmUgTG9nSW5mbyhzdHIpIHsgXAogICAgTG9nTWVzc2FnZShlTG9nTGV2ZWxfSU5GTywgXAogICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6d3N0cmluZ3N0cmVhbSY+KHN0ZDo6d3N0cmluZ3N0cmVhbSgpIDw8IExPR19IRUxQRVIgPDwgc3RyKSwgXAogICAgICAgIHN0YXRpY19jYXN0PHN0ZDo6d3N0cmluZ3N0cmVhbSY+KHN0ZDo6d3N0cmluZ3N0cmVhbSgpIDw8IExPR19IRUxQRVJfMikgXAogICAgKTsgXAp9CgppbnQgbWFpbigpCnsKCUxvZ0luZm8oTCJUZXN0IGxvZyIpOwoJcmV0dXJuIDA7Cn0=