From 14d5e19354eb8367e71196422bf9f003ab1db728 Mon Sep 17 00:00:00 2001 From: Martijn van Eijk Date: Thu, 14 Jan 2016 16:39:57 +0000 Subject: [PATCH 1/2] Implemented logRotation function --- src/main/CommandHandler.cpp | 1 + src/util/Logging.cpp | 20 ++++++++++++++++++++ src/util/Logging.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/src/main/CommandHandler.cpp b/src/main/CommandHandler.cpp index 4c372b6655..5a26e64d5a 100644 --- a/src/main/CommandHandler.cpp +++ b/src/main/CommandHandler.cpp @@ -463,6 +463,7 @@ void CommandHandler::logRotate(std::string const& params, std::string& retStr) { retStr = "Log rotate..."; + Logging::rotateLogFile(); } void diff --git a/src/util/Logging.cpp b/src/util/Logging.cpp index 9a56462d21..bdc3d84730 100644 --- a/src/util/Logging.cpp +++ b/src/util/Logging.cpp @@ -19,6 +19,7 @@ namespace stellar { el::Configurations Logging::gDefaultConf; +int32_t Logging::logFileIndex; void Logging::setFmt(std::string const& peerID, bool timestamps) @@ -60,7 +61,10 @@ Logging::init() gDefaultConf.setToDefault(); gDefaultConf.setGlobally(el::ConfigurationType::ToStandardOutput, "true"); gDefaultConf.setGlobally(el::ConfigurationType::ToFile, "false"); + gDefaultConf.setGlobally(el::ConfigurationType::MaxLogFileSize, "1"); setFmt(""); + logFileIndex = 0; + el::Helpers::installPreRollOutCallback(rolloutHandler); } void @@ -71,6 +75,22 @@ Logging::setLoggingToFile(std::string const& filename) el::Loggers::reconfigureAllLoggers(gDefaultConf); } +void +Logging::rolloutHandler(const char* filename, std::size_t size) { + // size is there to match easylogging++ library template + std::stringstream ss; + ss << "mv " << filename << " " << filename << "." << ++logFileIndex; + system(ss.str().c_str()); + el::Loggers::removeFlag(el::LoggingFlag::StrictLogFileSizeCheck); +} + + +void +Logging::rotateLogFile() +{ + el::Loggers::addFlag(el::LoggingFlag::StrictLogFileSizeCheck); +} + el::Level Logging::getLogLevel(std::string const& partition) { diff --git a/src/util/Logging.h b/src/util/Logging.h index 4e8b34ae16..f11198f158 100644 --- a/src/util/Logging.h +++ b/src/util/Logging.h @@ -17,11 +17,14 @@ namespace stellar class Logging { static el::Configurations gDefaultConf; + static int32_t logFileIndex; public: static void init(); static void setFmt(std::string const& peerID, bool timestamps = true); static void setLoggingToFile(std::string const& filename); + static void rotateLogFile(); + static void rolloutHandler(const char* filename, std::size_t size); static void setLogLevel(el::Level level, const char* partition); static el::Level getLLfromString(std::string const& levelName); static el::Level getLogLevel(std::string const& partition); From 92587f203d44107f4e1e0095f64a8cd500dd1cdc Mon Sep 17 00:00:00 2001 From: mvaneijk Date: Fri, 22 Jan 2016 15:10:20 +0100 Subject: [PATCH 2/2] Use std::rename instead of a systemcall --- src/util/Logging.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/util/Logging.cpp b/src/util/Logging.cpp index bdc3d84730..f433bed0f0 100644 --- a/src/util/Logging.cpp +++ b/src/util/Logging.cpp @@ -78,9 +78,9 @@ Logging::setLoggingToFile(std::string const& filename) void Logging::rolloutHandler(const char* filename, std::size_t size) { // size is there to match easylogging++ library template - std::stringstream ss; - ss << "mv " << filename << " " << filename << "." << ++logFileIndex; - system(ss.str().c_str()); + std::stringstream ss_new_filename; + ss_new_filename << filename << "." << ++logFileIndex; + std::rename(filename, ss_new_filename.str().c_str()); el::Loggers::removeFlag(el::LoggingFlag::StrictLogFileSizeCheck); }