summaryrefslogtreecommitdiffstats
path: root/src/LoggerListeners.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/LoggerListeners.cpp')
-rw-r--r--src/LoggerListeners.cpp120
1 files changed, 71 insertions, 49 deletions
diff --git a/src/LoggerListeners.cpp b/src/LoggerListeners.cpp
index ba8139678..3b6ed2147 100644
--- a/src/LoggerListeners.cpp
+++ b/src/LoggerListeners.cpp
@@ -251,11 +251,11 @@ class cNullConsoleListener
-cLogger::cListener * MakeConsoleListener(bool a_IsService)
+std::unique_ptr<cLogger::cListener> MakeConsoleListener(bool a_IsService)
{
if (a_IsService)
{
- return new cNullConsoleListener;
+ return cpp14::make_unique<cNullConsoleListener>();
}
#ifdef _WIN32
@@ -267,25 +267,25 @@ cLogger::cListener * MakeConsoleListener(bool a_IsService)
HANDLE Console = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(Console, &sbi);
WORD DefaultConsoleAttrib = sbi.wAttributes;
- return new cWindowsConsoleListener(Console, DefaultConsoleAttrib);
+ return cpp14::make_unique<cWindowsConsoleListener>(Console, DefaultConsoleAttrib);
}
else
{
- return new cVanillaCPPConsoleListener;
+ return cpp14::make_unique<cVanillaCPPConsoleListener>();
}
#elif defined (__linux) && !defined(ANDROID_NDK)
// TODO: lookup terminal in terminfo
if (isatty(fileno(stdout)))
{
- return new cLinuxConsoleListener();
+ return cpp14::make_unique<cLinuxConsoleListener>();
}
else
{
- return new cVanillaCPPConsoleListener();
+ return cpp14::make_unique<cVanillaCPPConsoleListener>();
}
#else
- return new cVanillaCPPConsoleListener();
+ return cpp14::make_unique<cVanillaCPPConsoleListener>();
#endif
}
@@ -296,60 +296,82 @@ cLogger::cListener * MakeConsoleListener(bool a_IsService)
////////////////////////////////////////////////////////////////////////////////
// cFileListener:
-cFileListener::cFileListener(void)
+class cFileListener
+ : public cLogger::cListener
{
- cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
- m_File.Open(
- FILE_IO_PREFIX + Printf(
- "logs/LOG_%d.txt",
- std::chrono::duration_cast<std::chrono::duration<int, std::ratio<1>>>(
- std::chrono::system_clock::now().time_since_epoch()
- ).count()
- ),
- cFile::fmAppend
- );
-}
-
-
+public:
+ cFileListener(void) {}
+ bool Open()
+ {
+ // Assume creation succeeds, as the API does not provide a way to tell if the folder exists.
+ cFile::CreateFolder(FILE_IO_PREFIX + AString("logs"));
+ bool success = m_File.Open(
+ FILE_IO_PREFIX + Printf(
+ "logs/LOG_%d.txt",
+ std::chrono::duration_cast<std::chrono::duration<int, std::ratio<1>>>(
+ std::chrono::system_clock::now().time_since_epoch()
+ ).count()
+ ),
+ cFile::fmAppend
+ );
+ return success;
+ }
-void cFileListener::Log(AString a_Message, cLogger::eLogLevel a_LogLevel)
-{
- const char * LogLevelPrefix = "Unkn ";
- bool ShouldFlush = false;
- switch (a_LogLevel)
+ virtual void Log(AString a_Message, cLogger::eLogLevel a_LogLevel) override
{
- case cLogger::llRegular:
- {
- LogLevelPrefix = " ";
- break;
- }
- case cLogger::llInfo:
- {
- LogLevelPrefix = "Info ";
- break;
- }
- case cLogger::llWarning:
+ const char * LogLevelPrefix = "Unkn ";
+ bool ShouldFlush = false;
+ switch (a_LogLevel)
{
- LogLevelPrefix = "Warn ";
- ShouldFlush = true;
- break;
+ case cLogger::llRegular:
+ {
+ LogLevelPrefix = " ";
+ break;
+ }
+ case cLogger::llInfo:
+ {
+ LogLevelPrefix = "Info ";
+ break;
+ }
+ case cLogger::llWarning:
+ {
+ LogLevelPrefix = "Warn ";
+ ShouldFlush = true;
+ break;
+ }
+ case cLogger::llError:
+ {
+ LogLevelPrefix = "Err ";
+ ShouldFlush = true;
+ break;
+ }
}
- case cLogger::llError:
+ m_File.Printf("%s%s", LogLevelPrefix, a_Message.c_str());
+ if (ShouldFlush)
{
- LogLevelPrefix = "Err ";
- ShouldFlush = true;
- break;
+ m_File.Flush();
}
}
- m_File.Printf("%s%s", LogLevelPrefix, a_Message.c_str());
- if (ShouldFlush)
+
+private:
+
+ cFile m_File;
+};
+
+
+
+
+
+std::pair<bool, std::unique_ptr<cLogger::cListener>> MakeFileListener()
+{
+ auto listener = cpp14::make_unique<cFileListener>();
+ if (!listener->Open())
{
- m_File.Flush();
+ return {false, nullptr};
}
+ return {true, std::move(listener)};
}
-
-