logic: removed ring-logging

* made ring-logging optional
This commit is contained in:
malte_langkabel
2016-10-11 17:47:22 +02:00
parent f6ae1afdb2
commit c018020a73
3 changed files with 66 additions and 50 deletions
+1 -1
View File
@@ -86,8 +86,8 @@ void Application::loadSettings()
consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS);
logManager->addLogger(consoleLogger);
FileLogger::setFilePath(UserPaths::getLogPath());
std::shared_ptr<FileLogger> fileLogger = std::make_shared<FileLogger>();
fileLogger->setLogDirectory(UserPaths::getLogPath());
fileLogger->setLogLevel(Logger::LOG_ALL);
logManager->addLogger(fileLogger);
}
+51 -35
View File
@@ -6,28 +6,26 @@
#include "utility/file/FileSystem.h"
std::string FileLogger::s_filePath = "user/log/";
unsigned int FileLogger::s_maxLogCount = 1000;
unsigned int FileLogger::s_amountOfLogFiles = 2;
FileLogger::FileLogger()
: Logger("FileLogger")
, m_logCount(0)
, m_suffix(1)
, m_logFileName(getFileName())
, m_logDirectory("user/log/")
, m_maxLogLineCount(0)
, m_maxLogFileCount(0)
, m_currentLogLineCount(0)
, m_currentLogFileCount(0)
{
setupFileName();
changeLogFile();
updateLogFileName();
}
FileLogger::~FileLogger()
{
}
void FileLogger::setFilePath(const std::string& filePath)
void FileLogger::setLogDirectory(const std::string& filePath)
{
s_filePath = filePath;
createDirectory();
m_logDirectory = filePath;
FileSystem::createDirectory(m_logDirectory);
}
void FileLogger::logInfo(const LogMessage& message)
@@ -45,7 +43,7 @@ void FileLogger::logError(const LogMessage& message)
logMessage("ERROR", message);
}
void FileLogger::setupFileName()
std::string FileLogger::getFileName()
{
time_t time;
std::time(&time);
@@ -58,37 +56,55 @@ void FileLogger::setupFileName()
filename << (t.tm_mday < 10 ? "0" : "") << t.tm_mday << "_";
filename << (t.tm_hour < 10 ? "0" : "") << t.tm_hour << "-";
filename << (t.tm_min < 10 ? "0" : "") << t.tm_min << "-";
filename << (t.tm_sec < 10 ? "0" : "") << t.tm_sec << "_";
m_fileName = filename.str();
filename << (t.tm_sec < 10 ? "0" : "") << t.tm_sec;
return filename.str();
}
void FileLogger::createDirectory()
void FileLogger::setMaxLogLineCount(unsigned int lineCount)
{
if (s_filePath.length() > 0)
m_maxLogLineCount = lineCount;
}
void FileLogger::setMaxLogFileCount(unsigned int fileCount)
{
m_maxLogFileCount = fileCount;
}
void FileLogger::updateLogFileName()
{
bool fileChanged = false;
m_currentLogFileName = m_logFileName;
if (m_maxLogFileCount > 0)
{
FileSystem::createDirectory(s_filePath);
m_currentLogFileName += "_";
if (m_currentLogLineCount >= m_maxLogLineCount)
{
m_currentLogLineCount = 0;
m_currentLogFileCount++;
if (m_currentLogFileCount >= m_maxLogFileCount)
{
m_currentLogFileCount = 0;
}
fileChanged = true;
}
m_currentLogFileName += std::to_string(m_currentLogFileCount);
}
}
m_currentLogFileName += ".txt";
void FileLogger::setMaxLogCount(unsigned int logCount)
{
s_maxLogCount = logCount;
}
void FileLogger::changeLogFile()
{
m_suffix = ++m_suffix % s_amountOfLogFiles;
m_currentLogFile = m_fileName + (m_suffix ? "1" : "0") + ".txt";
FileSystem::remove(s_filePath + m_currentLogFile);
if (fileChanged)
{
FileSystem::remove(m_logDirectory + m_currentLogFileName);
}
}
void FileLogger::logMessage(const std::string& type, const LogMessage& message)
{
std::ofstream fileStream;
fileStream.open(s_filePath + m_currentLogFile, std::ios::app);
fileStream.open(m_logDirectory + m_currentLogFileName, std::ios::app);
fileStream << message.getTimeString("%H:%M:%S") << " | ";
if (message.filePath.size())
@@ -99,9 +115,9 @@ void FileLogger::logMessage(const std::string& type, const LogMessage& message)
fileStream << type << ": " << message.message << std::endl;
fileStream.close();
if (++m_logCount >= s_maxLogCount)
m_currentLogLineCount++;
if (m_maxLogFileCount > 0)
{
changeLogFile();
m_logCount = 0;
updateLogFileName();
}
}
+14 -14
View File
@@ -12,29 +12,29 @@ public:
FileLogger();
virtual ~FileLogger();
static void setFilePath(const std::string& filePath);
static void setMaxLogCount(unsigned int logCount);
static void setNumberOfLogFiles(unsigned int amount);
void setLogDirectory(const std::string& filePath);
void setMaxLogLineCount(unsigned int logCount);
// setting the max log file count to 0 will disable ringlogging
void setMaxLogFileCount(unsigned int amount);
private:
virtual void logInfo(const LogMessage& message);
virtual void logWarning(const LogMessage& message);
virtual void logError(const LogMessage& message);
static void createDirectory();
static std::string s_filePath;
static unsigned int s_maxLogCount;
static unsigned int s_amountOfLogFiles;
void setupFileName();
static std::string getFileName();
void logMessage(const std::string& type, const LogMessage& message);
void changeLogFile();
void updateLogFileName();
unsigned int m_logCount;
unsigned int m_suffix;
const std::string m_logFileName;
std::string m_logDirectory;
unsigned int m_maxLogLineCount;
unsigned int m_maxLogFileCount;
unsigned int m_currentLogLineCount;
unsigned int m_currentLogFileCount;
std::string m_currentLogFile;
std::string m_fileName;
std::string m_currentLogFileName;
};
#endif // FILE_LOGGER_H