From 53ae146667866733095d03af319897f0b344a9a8 Mon Sep 17 00:00:00 2001 From: Jacob Schramm Date: Wed, 28 Oct 2020 23:19:24 +0100 Subject: [PATCH] Introducing RotateLog configuration option that allows disabling timestamps on the logfiles. --- .gitignore | 1 + Conf.cpp | 8 ++++++++ Conf.h | 2 ++ Log.cpp | 15 ++++++++++++--- Log.h | 2 +- MMDVM.ini | 1 + MMDVMHost.cpp | 4 ++-- RemoteCommand.cpp | 2 +- 8 files changed, 28 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 14ab1c8..4009b5a 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,6 @@ RemoteCommand *.user *.VC.db .vs +.vscode *.ambe GitVersion.h diff --git a/Conf.cpp b/Conf.cpp index 7491717..890dde5 100644 --- a/Conf.cpp +++ b/Conf.cpp @@ -82,6 +82,7 @@ m_logDisplayLevel(0U), m_logFileLevel(0U), m_logFilePath(), m_logFileRoot(), +m_logRotateLogs(1U), m_cwIdEnabled(false), m_cwIdTime(10U), m_cwIdCallsign(), @@ -453,6 +454,8 @@ bool CConf::read() m_logFileLevel = (unsigned int)::atoi(value); else if (::strcmp(key, "DisplayLevel") == 0) m_logDisplayLevel = (unsigned int)::atoi(value); + else if (::strcmp(key, "RotateLogs") == 0) + m_logRotateLogs = (unsigned int)::atoi(value); } else if (section == SECTION_CWID) { if (::strcmp(key, "Enable") == 0) m_cwIdEnabled = ::atoi(value) == 1; @@ -1074,6 +1077,11 @@ std::string CConf::getLogFileRoot() const return m_logFileRoot; } +unsigned int CConf::getLogRotateLogs() const +{ + return m_logRotateLogs; +} + bool CConf::getCWIdEnabled() const { return m_cwIdEnabled; diff --git a/Conf.h b/Conf.h index 335d461..0ea44a9 100644 --- a/Conf.h +++ b/Conf.h @@ -54,6 +54,7 @@ public: unsigned int getLogFileLevel() const; std::string getLogFilePath() const; std::string getLogFileRoot() const; + unsigned int getLogRotateLogs() const; // The CW ID section bool getCWIdEnabled() const; @@ -337,6 +338,7 @@ private: unsigned int m_logFileLevel; std::string m_logFilePath; std::string m_logFileRoot; + unsigned int m_logRotateLogs; bool m_cwIdEnabled; unsigned int m_cwIdTime; diff --git a/Log.cpp b/Log.cpp index 1d5ad29..6e573a8 100644 --- a/Log.cpp +++ b/Log.cpp @@ -41,6 +41,8 @@ static bool m_daemon = false; static unsigned int m_displayLevel = 2U; +static unsigned int m_rotateLogs = 1U; + static struct tm m_tm; static char LEVELS[] = " DMIWEF"; @@ -66,10 +68,16 @@ static bool LogOpen() } char filename[200U]; + char timestamp[37U] = ""; + + if (m_rotateLogs) { + ::sprintf(timestamp, "-%04d-%02d-%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + } + #if defined(_WIN32) || defined(_WIN64) - ::sprintf(filename, "%s\\%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + ::sprintf(filename, "%s\\%s%s.log", m_filePath.c_str(), m_fileRoot.c_str(), timestamp); #else - ::sprintf(filename, "%s/%s-%04d-%02d-%02d.log", m_filePath.c_str(), m_fileRoot.c_str(), tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); + ::sprintf(filename, "%s/%s%s.log", m_filePath.c_str(), m_fileRoot.c_str(), timestamp); #endif if ((m_fpLog = ::fopen(filename, "a+t")) != NULL) { @@ -86,12 +94,13 @@ static bool LogOpen() return status; } -bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel) +bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, unsigned int rotateLogs) { m_filePath = filePath; m_fileRoot = fileRoot; m_fileLevel = fileLevel; m_displayLevel = displayLevel; + m_rotateLogs = rotateLogs; m_daemon = daemon; if (m_daemon) diff --git a/Log.h b/Log.h index 0d00653..0138a6c 100644 --- a/Log.h +++ b/Log.h @@ -30,7 +30,7 @@ extern void Log(unsigned int level, const char* fmt, ...); -extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel); +extern bool LogInitialise(bool daemon, const std::string& filePath, const std::string& fileRoot, unsigned int fileLevel, unsigned int displayLevel, unsigned int rotateLogs); extern void LogFinalise(); #endif diff --git a/MMDVM.ini b/MMDVM.ini index ccc561b..2ad20f6 100644 --- a/MMDVM.ini +++ b/MMDVM.ini @@ -26,6 +26,7 @@ DisplayLevel=1 FileLevel=1 FilePath=. FileRoot=MMDVM +RotateLogs=1 [CW Id] Enable=1 diff --git a/MMDVMHost.cpp b/MMDVMHost.cpp index f174b83..512af87 100644 --- a/MMDVMHost.cpp +++ b/MMDVMHost.cpp @@ -242,9 +242,9 @@ int CMMDVMHost::run() #endif #if !defined(_WIN32) && !defined(_WIN64) - ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel()); + ret = ::LogInitialise(m_daemon, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogRotateLogs()); #else - ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel()); + ret = ::LogInitialise(false, m_conf.getLogFilePath(), m_conf.getLogFileRoot(), m_conf.getLogFileLevel(), m_conf.getLogDisplayLevel(), m_conf.getLogRotateLogs()); #endif if (!ret) { ::fprintf(stderr, "MMDVMHost: unable to open the log file\n"); diff --git a/RemoteCommand.cpp b/RemoteCommand.cpp index fd96e46..33bd069 100644 --- a/RemoteCommand.cpp +++ b/RemoteCommand.cpp @@ -51,7 +51,7 @@ int main(int argc, char** argv) CRemoteCommand::CRemoteCommand(unsigned int port) : m_port(port) { - ::LogInitialise(false, ".", "RemoteCommand", 2U, 2U); + ::LogInitialise(false, ".", "RemoteCommand", 2U, 2U, 1U); } CRemoteCommand::~CRemoteCommand()