Blame view

GUI/SW1/SRC/LOGGER.cpp 1.6 KB
f309591f   Steve Greedy   Update to SW1
1
2
3
// Logger.cpp
// Implementation of a multithread safe singleton logger class
#include <stdexcept>
cd89a218   Steve Greedy   SW1 Update
4
#include "LOGGER.h"
f309591f   Steve Greedy   Update to SW1
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72

using namespace std;

const string Logger::kLogLevelHeader = "HEADER";
const string Logger::kLogLevelDebug = "DEBUG";
const string Logger::kLogLevelInfo  = "INFO";
const string Logger::kLogLevelError = "ERROR";

const char* const Logger::kLogFileName = "log.out";

Logger* Logger::pInstance = nullptr;

mutex Logger::sMutex;

Logger& Logger::instance()
{
	static Cleanup cleanup;

	lock_guard<mutex> guard(sMutex);
	if (pInstance == nullptr)
		pInstance = new Logger();
	return *pInstance;
}

Logger::Cleanup::~Cleanup()
{
	lock_guard<mutex> guard(Logger::sMutex);
	delete Logger::pInstance;
	Logger::pInstance = nullptr;
}

Logger::~Logger()
{
	mOutputStream.close();
}

Logger::Logger()
{
	mOutputStream.open(kLogFileName, ios_base::app);
	if (!mOutputStream.good()) {
		throw runtime_error("Unable to initialize the Logger!");
	}
}

void Logger::log(const string& inMessage, const string& inLogLevel)
{
	lock_guard<mutex> guard(sMutex);
	logHelper(inMessage, inLogLevel);
}

void Logger::log(const vector<string>& inMessages, const string& inLogLevel)
{
	lock_guard<mutex> guard(sMutex);
	for (size_t i = 0; i < inMessages.size(); i++) {
		logHelper(inMessages[i], inLogLevel);
	}
}

void Logger::logHelper(const std::string& inMessage, const std::string& inLogLevel)
{
    char tCurrentTime [80];

    time (&tTimeRaw);
    tTimeNow = localtime (&tTimeRaw);

    strftime (tCurrentTime,80,"%X",tTimeNow);

    mOutputStream << tCurrentTime <<"\t";
a399f76b   Steve Greedy   SW Updates
73
	mOutputStream << inLogLevel << ":   \t" << inMessage << endl;
f309591f   Steve Greedy   Update to SW1
74
}