#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;
}