summaryrefslogtreecommitdiffstats
path: root/src/LoggerListeners.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/LoggerListeners.cpp')
-rw-r--r--src/LoggerListeners.cpp122
1 files changed, 106 insertions, 16 deletions
diff --git a/src/LoggerListeners.cpp b/src/LoggerListeners.cpp
index d6567abe0..912342a65 100644
--- a/src/LoggerListeners.cpp
+++ b/src/LoggerListeners.cpp
@@ -5,6 +5,7 @@
#if defined(_WIN32)
#include <io.h> // Needed for _isatty(), not available on Linux
+ #include <time.h>
#elif defined(__linux) && !defined(ANDROID_NDK)
#include <unistd.h> // Needed for isatty() on Linux
#elif defined(ANDROID_NDK)
@@ -29,10 +30,15 @@
};
#endif
+
+
+
+
#ifdef _WIN32
class cWindowsConsoleListener
: public cColouredConsoleListener
{
+ typedef cColouredConsoleListener super;
public:
cWindowsConsoleListener(HANDLE a_Console, WORD a_DefaultConsoleAttrib) :
m_Console(a_Console),
@@ -43,47 +49,65 @@
#ifdef DEBUG
virtual void Log(AString a_Message, cLogger::eLogLevel a_LogLevel) override
{
- cColouredConsoleListener::Log(a_Message, a_LogLevel);
+ super::Log(a_Message, a_LogLevel);
// In a Windows Debug build, output the log to debug console as well:
OutputDebugStringA(a_Message.c_str());
}
#endif
-
-
+
+
virtual void SetLogColour(cLogger::eLogLevel a_LogLevel) override
{
// by default, gray on black
- WORD Attrib = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
+ WORD Attrib = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
switch (a_LogLevel)
{
case cLogger::llRegular:
+ {
// Gray on black
- Attrib = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
- break;
+ Attrib = FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
+ break;
+ }
case cLogger::llInfo:
+ {
// Yellow on black
- Attrib = FOREGROUND_GREEN | ;
- break;
+ Attrib = FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY;
+ break;
+ }
case cLogger::llWarning:
+ {
// Red on black
Attrib = FOREGROUND_RED | FOREGROUND_INTENSITY;
- break;
+ break;
+ }
case cLogger::llError:
- // Black on red
+ {
+ // Black on red
Attrib = BACKGROUND_RED | BACKGROUND_INTENSITY;
break;
+ }
}
SetConsoleTextAttribute(m_Console, Attrib);
}
+
+
virtual void SetDefaultLogColour() override
{
SetConsoleTextAttribute(m_Console, m_DefaultConsoleAttrib);
}
+
private:
+
HANDLE m_Console;
WORD m_DefaultConsoleAttrib;
};
+
+
+
#elif defined (__linux) && !defined(ANDROID_NDK)
+
+
+
class cLinuxConsoleListener
: public cColouredConsoleListener
{
@@ -93,30 +117,46 @@
switch (a_LogLevel)
{
case cLogger::llRegular:
+ {
// Whatever the console default is
printf("\x1b[0m");
break;
+ }
case cLogger::llInfo:
+ {
// Yellow on black
printf("\x1b[33;1m");
break;
+ }
case cLogger::llWarning:
+ {
// Red on black
printf("\x1b[31;1m");
break;
+ }
case cLogger::llError:
+ {
// Yellow on red
printf("\x1b[1;33;41;1m");
break;
+ }
}
}
+
+
virtual void SetDefaultLogColour() override
{
// Whatever the console default is
printf("\x1b[0m");
}
};
+
+
+
#elif defined(ANDROID_NDK)
+
+
+
class cAndroidConsoleListener
: public cLogger::cListener
{
@@ -127,23 +167,36 @@
switch (a_LogLevel)
{
case cLogger::llRegular:
+ {
AndroidLogLevel = ANDROID_LOG_VERBOSE;
break;
+ }
case cLogger::llInfo:
+ {
AndroidLogLevel = ANDROID_LOG_INFO;
break;
+ }
case cLogger::llWarning:
+ {
AndroidLogLevel = ANDROID_LOG_WARNING;
break;
+ }
case cLogger::llError:
+ {
AndroidLogLevel = ANDROID_LOG_ERROR;
break;
+ }
}
__android_log_print(AndroidLogLevel, "MCServer", "%s", a_Message.c_str());
}
};
+
#endif
+
+
+
+
class cVanillaCPPConsoleListener
: public cLogger::cListener
{
@@ -154,17 +207,25 @@ public:
switch (a_LogLevel)
{
case cLogger::llRegular:
+ {
LogLevelString = "Log";
break;
+ }
case cLogger::llInfo:
+ {
LogLevelString = "Info";
break;
+ }
case cLogger::llWarning:
+ {
LogLevelString = "Warning";
break;
+ }
case cLogger::llError:
+ {
LogLevelString = "Error";
break;
+ }
}
printf("%s: %s", LogLevelString.c_str(), a_Message.c_str());
}
@@ -172,7 +233,9 @@ public:
-cLogger::cListener * MakeConsoleListener()
+
+
+cLogger::cListener * MakeConsoleListener(void)
{
#ifdef _WIN32
// See whether we are writing to a console the default console attrib:
@@ -180,12 +243,14 @@ cLogger::cListener * MakeConsoleListener()
if (ShouldColorOutput)
{
CONSOLE_SCREEN_BUFFER_INFO sbi;
- HANDLE Console = getStdHandle(STD_OUTPUT_HANDLE);
+ HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(Console, &sbi);
WORD DefaultConsoleAttrib = sbi.wAttributes;
return new cWindowsConsoleListener(Console, DefaultConsoleAttrib);
- } else {
- return new cVanillaCPPConsoleListener();
+ }
+ else
+ {
+ return new cVanillaCPPConsoleListener;
}
#elif defined (__linux) && !defined(ANDROID_NDK)
@@ -193,7 +258,9 @@ cLogger::cListener * MakeConsoleListener()
if (isatty(fileno(stdout)))
{
return new cLinuxConsoleListener();
- } else {
+ }
+ else
+ {
return new cVanillaCPPConsoleListener();
}
#else
@@ -201,7 +268,14 @@ cLogger::cListener * MakeConsoleListener()
#endif
}
-cFileListener::cFileListener()
+
+
+
+
+////////////////////////////////////////////////////////////////////////////////
+// cFileListener:
+
+cFileListener::cFileListener(void)
{
cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
AString FileName;
@@ -209,23 +283,39 @@ cFileListener::cFileListener()
m_File.Open(FileName, cFile::fmAppend);
}
+
+
+
+
void cFileListener::Log(AString a_Message, cLogger::eLogLevel a_LogLevel)
{
AString LogLevelString;
switch (a_LogLevel)
{
case cLogger::llRegular:
+ {
LogLevelString = "Log";
break;
+ }
case cLogger::llInfo:
+ {
LogLevelString = "Info";
break;
+ }
case cLogger::llWarning:
+ {
LogLevelString = "Warning";
break;
+ }
case cLogger::llError:
+ {
LogLevelString = "Error";
break;
+ }
}
m_File.Printf("%s: %s", LogLevelString.c_str(), a_Message.c_str());
}
+
+
+
+