#include <iostream>
#include <fstream>
#include <string>
#include <memory>
using namespace std;
class Logger
{
private:
static unique_ptr<Logger> loggerPtr;
std::fstream fs;
//To ensure no one else can instantiate Logger.
Logger();
public:
enum MessageType
{
ERROR,
WARNING,
INFO
};
static Logger* Instance();
void LogFunc(std::string msg, MessageType type);
~Logger() { cout << "YES IT IS CLOSED !!"<<endl; }
friend unique_ptr<Logger> make_unique<Logger>();
};
unique_ptr<Logger> Logger::loggerPtr{};
Logger* Logger::Instance()
{
if (!loggerPtr)
{
loggerPtr = make_unique<Logger>();
}
return loggerPtr.get();
}
Logger::Logger()
{
fs.open("docker.log", std::fstream::in | std::fstream::out | std::fstream::app);
}
void Logger::LogFunc(std::string msg, MessageType type)
{
std::cout << msg;
switch (type)
{
case ERROR:
fs << msg;
break;
case WARNING:
fs << msg;
break;
case INFO:
fs << msg;
break;
}
}
int main() {
Logger::Instance()->LogFunc("Hello.", Logger::INFO);
std::fstream fs;
fs.open("docker_test.log", std::fstream::in | std::fstream::out | std::fstream::app);
fs << "Why does this work?!";
system("pwd");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPG1lbW9yeT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCgpjbGFzcyBMb2dnZXIKewpwcml2YXRlOgogICAgc3RhdGljIHVuaXF1ZV9wdHI8TG9nZ2VyPiBsb2dnZXJQdHI7CiAgICBzdGQ6OmZzdHJlYW0gZnM7CgogICAgLy9UbyBlbnN1cmUgbm8gb25lIGVsc2UgY2FuIGluc3RhbnRpYXRlIExvZ2dlci4KICAgIExvZ2dlcigpOyAKCnB1YmxpYzoKICAgIGVudW0gTWVzc2FnZVR5cGUKICAgIHsKICAgICAgICBFUlJPUiwKICAgICAgICBXQVJOSU5HLAogICAgICAgIElORk8KICAgIH07CgogICAgc3RhdGljIExvZ2dlciogSW5zdGFuY2UoKTsKICAgIHZvaWQgTG9nRnVuYyhzdGQ6OnN0cmluZyBtc2csIE1lc3NhZ2VUeXBlIHR5cGUpOwogICAgfkxvZ2dlcigpIHsgY291dCA8PCAiWUVTIElUIElTIENMT1NFRCAhISI8PGVuZGw7ICB9CgpmcmllbmQgdW5pcXVlX3B0cjxMb2dnZXI+IG1ha2VfdW5pcXVlPExvZ2dlcj4oKTsgCn07Cgp1bmlxdWVfcHRyPExvZ2dlcj4gTG9nZ2VyOjpsb2dnZXJQdHJ7fTsKCkxvZ2dlciogTG9nZ2VyOjpJbnN0YW5jZSgpCnsKICAgIGlmICghbG9nZ2VyUHRyKQogICAgewogICAgICAgIGxvZ2dlclB0ciA9IG1ha2VfdW5pcXVlPExvZ2dlcj4oKTsKICAgIH0KCiAgICByZXR1cm4gbG9nZ2VyUHRyLmdldCgpOwp9CgpMb2dnZXI6OkxvZ2dlcigpCnsKICAgIGZzLm9wZW4oImRvY2tlci5sb2ciLCBzdGQ6OmZzdHJlYW06OmluIHwgc3RkOjpmc3RyZWFtOjpvdXQgfCBzdGQ6OmZzdHJlYW06OmFwcCk7Cn0KCnZvaWQgTG9nZ2VyOjpMb2dGdW5jKHN0ZDo6c3RyaW5nIG1zZywgTWVzc2FnZVR5cGUgdHlwZSkKewogICAgc3RkOjpjb3V0IDw8IG1zZzsKCiAgICBzd2l0Y2ggKHR5cGUpCiAgICB7CiAgICAgICAgY2FzZSBFUlJPUjoKICAgICAgICAgICAgZnMgPDwgbXNnOwogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFdBUk5JTkc6CiAgICAgICAgICAgIGZzIDw8IG1zZzsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBJTkZPOgogICAgICAgICAgICBmcyA8PCBtc2c7CiAgICAgICAgICAgIGJyZWFrOwogICAgfQp9CgoKCmludCBtYWluKCkgewogICAgTG9nZ2VyOjpJbnN0YW5jZSgpLT5Mb2dGdW5jKCJIZWxsby4iLCBMb2dnZXI6OklORk8pOwoKICAgIHN0ZDo6ZnN0cmVhbSBmczsKICAgIGZzLm9wZW4oImRvY2tlcl90ZXN0LmxvZyIsIHN0ZDo6ZnN0cmVhbTo6aW4gfCBzdGQ6OmZzdHJlYW06Om91dCB8IHN0ZDo6ZnN0cmVhbTo6YXBwKTsKICAgIGZzIDw8ICJXaHkgZG9lcyB0aGlzIHdvcms/ISI7CgogICAgc3lzdGVtKCJwd2QiKTsKCiAgICByZXR1cm4gMDsKfQ==