Limited Windows service log file size to 1MB #4677

Oversized file is renamed to .1 to keep old log files in case needed,
but the old file will eventually be overwritten on 2nd recycle
This commit is contained in:
Nick Bolton 2015-05-19 14:04:02 +01:00
parent 2cce60f672
commit 46527ded56
1 changed files with 18 additions and 0 deletions

View File

@ -22,6 +22,10 @@
#include <fstream> #include <fstream>
enum EFileLogOutputter {
kFileSizeLimit = 1024 // kb
};
// //
// StopLogOutputter // StopLogOutputter
// //
@ -252,13 +256,27 @@ FileLogOutputter::setLogFilename(const char* logFile)
bool bool
FileLogOutputter::write(ELevel level, const char *message) FileLogOutputter::write(ELevel level, const char *message)
{ {
bool moveFile = false;
std::ofstream m_handle; std::ofstream m_handle;
m_handle.open(m_fileName.c_str(), std::fstream::app); m_handle.open(m_fileName.c_str(), std::fstream::app);
if (m_handle.is_open() && m_handle.fail() != true) { if (m_handle.is_open() && m_handle.fail() != true) {
m_handle << message << std::endl; m_handle << message << std::endl;
// when file size exceeds limits, move to 'old log' filename.
int p = m_handle.tellp();
if (p > (kFileSizeLimit * 1024)) {
moveFile = true;
}
} }
m_handle.close(); m_handle.close();
if (moveFile) {
String oldLogFilename = synergy::string::sprintf("%s.1", m_fileName.c_str());
remove(oldLogFilename.c_str());
rename(m_fileName.c_str(), oldLogFilename.c_str());
}
return true; return true;
} }