#include <iostream>
#include <ctime>
#include <iomanip>
class Logger {
private:
std::ostream &stream;
void print_time() {
std::time_t t = std::time(nullptr);
stream << "[" << std::put_time(std::localtime(&t), "%F %T %Z") << "] ";
}
public:
//Maybe also take options for how to log?
Logger(std::ostream &stream) : stream(stream) { }
template <typename T>
std::ostream &operator<<(const T &thing) {
print_time();
return stream << thing;
}
};
int main()
{
Logger log(std::cout);
log << "Warning!" << std::endl;
log << "Another warning!" << std::endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxpb21hbmlwPgoKY2xhc3MgTG9nZ2VyIHsKICBwcml2YXRlOgogICAgc3RkOjpvc3RyZWFtICZzdHJlYW07CiAgICB2b2lkIHByaW50X3RpbWUoKSB7CiAgICAJc3RkOjp0aW1lX3QgdCA9IHN0ZDo6dGltZShudWxscHRyKTsKCSAgICBzdHJlYW0gPDwgIlsiIDw8IHN0ZDo6cHV0X3RpbWUoc3RkOjpsb2NhbHRpbWUoJnQpLCAiJUYgJVQgJVoiKSA8PCAiXSAiOwogICAgfQogIHB1YmxpYzoKICAgIC8vTWF5YmUgYWxzbyB0YWtlIG9wdGlvbnMgZm9yIGhvdyB0byBsb2c/CglMb2dnZXIoc3RkOjpvc3RyZWFtICZzdHJlYW0pIDogc3RyZWFtKHN0cmVhbSkgeyB9Cgl0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KCXN0ZDo6b3N0cmVhbSAmb3BlcmF0b3I8PChjb25zdCBUICZ0aGluZykgIHsKCSAgICBwcmludF90aW1lKCk7CgkgICAgcmV0dXJuIHN0cmVhbSA8PCB0aGluZzsKCX0KfTsKCmludCBtYWluKCkKewoJTG9nZ2VyIGxvZyhzdGQ6OmNvdXQpOwoJbG9nIDw8ICJXYXJuaW5nISIgPDwgc3RkOjplbmRsOwoJbG9nIDw8ICJBbm90aGVyIHdhcm5pbmchIiA8PCBzdGQ6OmVuZGw7Cn0=