utility: ringlogging

ringlogging
default_logs_per_file: 1000
default_log_files:2
This commit is contained in:
Andreas Stallinger
2016-02-22 20:02:53 +01:00
parent 1928e4beab
commit e5eb7f2f12
3 changed files with 37 additions and 2 deletions
+1
View File
@@ -55,6 +55,7 @@
*.sqlite
*.pch
*.swp
*.swo
.clang_complete
.ycm_extra_conf.py
.ycm_extra_conf.pyc
+28 -2
View File
@@ -2,15 +2,20 @@
#include <fstream>
#include <sstream>
#include <cstdio>
#include "utility/file/FileSystem.h"
std::string FileLogger::s_filePath = "data/log/";
unsigned int FileLogger::s_maxLogCount = 1000;
unsigned int FileLogger::s_amountOfLogFiles = 2;
FileLogger::FileLogger()
: Logger("FileLogger")
, m_suffix(0)
{
setupFileName();
changeLogFile();
}
FileLogger::~FileLogger()
@@ -52,9 +57,10 @@ 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 << ".txt";
filename << (t.tm_sec < 10 ? "0" : "") << t.tm_sec << "_";
m_fileName = filename.str();
}
void FileLogger::createDirectory()
@@ -65,10 +71,25 @@ void FileLogger::createDirectory()
}
}
void FileLogger::setMaxLogCount(unsigned int logCount)
{
s_maxLogCount = logCount;
}
void FileLogger::changeLogFile()
{
m_suffix = ++m_suffix%s_amountOfLogFiles;
m_currentLogFile = s_filePath + m_fileName + char(m_suffix + 48) + ".txt";
if(FileSystem::exists(m_currentLogFile))
{
std::remove(m_currentLogFile.c_str());
}
}
void FileLogger::logMessage(const std::string& type, const LogMessage& message)
{
std::ofstream fileStream;
fileStream.open(s_filePath + m_fileName, std::ios::app);
fileStream.open(m_currentLogFile, std::ios::app);
fileStream << message.getTimeString("%H:%M:%S") << " | ";
if (message.filePath.size())
@@ -78,4 +99,9 @@ void FileLogger::logMessage(const std::string& type, const LogMessage& message)
fileStream << type << ": " << message.message << std::endl;
fileStream.close();
if(++m_logCount >= s_maxLogCount)
{
changeLogFile();
m_logCount = 0;
}
}
+8
View File
@@ -13,6 +13,8 @@ public:
virtual ~FileLogger();
static void setFilePath(const std::string& filePath);
static void setMaxLogCount(unsigned int logCount);
static void setNumberOfLogFiles(unsigned int amount);
private:
virtual void logInfo(const LogMessage& message);
@@ -21,10 +23,16 @@ private:
static void createDirectory();
static std::string s_filePath;
static unsigned int s_maxLogCount;
static unsigned int s_amountOfLogFiles;
void setupFileName();
void logMessage(const std::string& type, const LogMessage& message);
void changeLogFile();
unsigned int m_logCount;
unsigned int m_suffix;
std::string m_currentLogFile;
std::string m_fileName;
};