Skip to content

Commit d269732

Browse files
committed
Redesign log global conf
1 parent b07ca5e commit d269732

File tree

2 files changed

+42
-77
lines changed

2 files changed

+42
-77
lines changed

src/wsjcpp_core.cpp

+34-58
Original file line numberDiff line numberDiff line change
@@ -760,37 +760,29 @@ bool WsjcppCore::recoursiveRemoveDir(const std::string& sDir) {
760760

761761
WsjcppLogGlobalConf::WsjcppLogGlobalConf() {
762762
//
763+
logDir = "./";
764+
logPrefixFile = "";
765+
logFile = "";
766+
enableLogFile = true;
767+
logStartTime = 0;
768+
logRotationPeriodInSeconds = 51000;
763769
}
764770

765-
WsjcppLogGlobalConf::~WsjcppLogGlobalConf() {
766-
//
767-
}
768-
769-
WsjcppLogGlobalConf WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF;
770-
// std::mutex * WsjcppLog::g_WSJCPP_LOG_MUTEX = nullptr;
771-
std::string WsjcppLog::g_WSJCPP_LOG_DIR = "./";
772-
std::string WsjcppLog::g_WSJCPP_LOG_FILE = "";
773-
std::string WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = "";
774-
bool WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = true;
775-
long WsjcppLog::g_WSJCPP_LOG_START_TIME = 0;
776-
long WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = 51000;
777-
778-
// Last log messages
779-
std::deque<std::string> * WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = nullptr;
780-
781771
// ---------------------------------------------------------------------
782772

783-
void WsjcppLog::doLogRotateUpdateFilename(bool bForce) {
773+
void WsjcppLogGlobalConf::doLogRotateUpdateFilename(bool bForce) {
784774
long t = WsjcppCore::currentTime_seconds();
785-
long nEverySeconds = WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS; // rotate log if started now or if time left more then 1 day
786-
if (g_WSJCPP_LOG_START_TIME == 0 || t - g_WSJCPP_LOG_START_TIME > nEverySeconds || bForce) {
787-
g_WSJCPP_LOG_START_TIME = t;
788-
g_WSJCPP_LOG_FILE = g_WSJCPP_LOG_DIR + "/"
789-
+ WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE + "_"
790-
+ WsjcppCore::formatTimeForFilename(g_WSJCPP_LOG_START_TIME) + ".log";
775+
long nEverySeconds = logRotationPeriodInSeconds; // rotate log if started now or if time left more then 1 day
776+
if (logStartTime == 0 || t - logStartTime > nEverySeconds || bForce) {
777+
logStartTime = t;
778+
logFile = logDir + "/"
779+
+ logPrefixFile + "_"
780+
+ WsjcppCore::formatTimeForFilename(logStartTime) + ".log";
791781
}
792782
}
793783

784+
WsjcppLogGlobalConf WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF;
785+
794786
// ---------------------------------------------------------------------
795787

796788
void WsjcppLog::info(const std::string & sTag, const std::string &sMessage) {
@@ -830,67 +822,49 @@ void WsjcppLog::ok(const std::string &sTag, const std::string &sMessage) {
830822
// ---------------------------------------------------------------------
831823

832824
std::vector<std::string> WsjcppLog::getLastLogMessages() {
833-
WsjcppLog::initGlobalVariables();
834825
std::lock_guard<std::mutex> lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex);
835826
std::vector<std::string> vRet;
836-
for (int i = 0; i < g_WSJCPP_LOG_LAST_MESSAGES->size(); i++) {
837-
vRet.push_back(g_WSJCPP_LOG_LAST_MESSAGES->at(i));
827+
for (int i = 0; i < WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size(); i++) {
828+
vRet.push_back(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages[i]);
838829
}
839830
return vRet;
840831
}
841832

842833
// ---------------------------------------------------------------------
843834

844835
void WsjcppLog::setLogDirectory(const std::string &sDirectoryPath) {
845-
WsjcppLog::g_WSJCPP_LOG_DIR = sDirectoryPath;
846-
if (!WsjcppCore::dirExists(WsjcppLog::g_WSJCPP_LOG_DIR)) {
847-
if (!WsjcppCore::makeDir(WsjcppLog::g_WSJCPP_LOG_DIR)) {
836+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logDir = sDirectoryPath;
837+
if (!WsjcppCore::dirExists(sDirectoryPath)) {
838+
if (!WsjcppCore::makeDir(sDirectoryPath)) {
848839
WsjcppLog::err("setLogDirectory", "Could not create log directory '" + sDirectoryPath + "'");
849840
}
850841
}
851-
WsjcppLog::doLogRotateUpdateFilename(true);
842+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true);
852843
}
853844

854845
// ---------------------------------------------------------------------
855846

856847
void WsjcppLog::setPrefixLogFile(const std::string &sPrefixLogFile) {
857-
WsjcppLog::g_WSJCPP_LOG_PREFIX_FILE = sPrefixLogFile;
858-
WsjcppLog::doLogRotateUpdateFilename(true);
848+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logPrefixFile = sPrefixLogFile;
849+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename(true);
859850
}
860851

861852
// ---------------------------------------------------------------------
862853

863854
void WsjcppLog::setEnableLogFile(bool bEnable) {
864-
WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE = bEnable;
855+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile = bEnable;
865856
}
866857

867858
// ---------------------------------------------------------------------
868859

869860
void WsjcppLog::setRotationPeriodInSec(long nRotationPeriodInSec) {
870-
WsjcppLog::g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS = nRotationPeriodInSec;
871-
}
872-
873-
// ---------------------------------------------------------------------
874-
875-
void WsjcppLog::initGlobalVariables() {
876-
// create deque if not created
877-
if (WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES == nullptr) {
878-
WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES = new std::deque<std::string>();
879-
// std::cout << WsjcppCore::currentTime_logformat() + ", " + WsjcppCore::threadId() + " Init last messages deque\r\n";
880-
}
881-
}
882-
883-
// ---------------------------------------------------------------------
884-
885-
void WsjcppLog::deinitGlobalVariables() {
886-
delete WsjcppLog::g_WSJCPP_LOG_LAST_MESSAGES;
861+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logRotationPeriodInSeconds = nRotationPeriodInSec;
887862
}
888863

889864
// ---------------------------------------------------------------------
890865

891866
void WsjcppLog::add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage) {
892-
WsjcppLog::initGlobalVariables();
893-
WsjcppLog::doLogRotateUpdateFilename();
867+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.doLogRotateUpdateFilename();
894868

895869
std::lock_guard<std::mutex> lock(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logMutex);
896870
WsjcppColorModifier def(WsjcppColorCode::FG_DEFAULT);
@@ -899,14 +873,16 @@ void WsjcppLog::add(WsjcppColorModifier &clr, const std::string &sType, const st
899873
+ " [" + sType + "] " + sTag + ": " + sMessage;
900874
std::cout << clr << sLogMessage << def << std::endl;
901875

902-
g_WSJCPP_LOG_LAST_MESSAGES->push_front(sLogMessage);
903-
while (g_WSJCPP_LOG_LAST_MESSAGES->size() > 50) {
904-
g_WSJCPP_LOG_LAST_MESSAGES->pop_back();
876+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.push_front(sLogMessage);
877+
878+
879+
while (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.size() > 50) {
880+
WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logLastMessages.pop_back();
905881
}
906882

907-
// log file
908-
if (WsjcppLog::g_WSJCPP_ENABLE_LOG_FILE) {
909-
std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_FILE, std::ios::app);
883+
// log file
884+
if (WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.enableLogFile) {
885+
std::ofstream logFile(WsjcppLog::g_WSJCPP_LOG_GLOBAL_CONF.logFile, std::ios::app);
910886
if (!logFile) {
911887
std::cout << "Error Opening File" << std::endl;
912888
return;

src/wsjcpp_core.h

+8-19
Original file line numberDiff line numberDiff line change
@@ -105,29 +105,20 @@ class WsjcppColorModifier {
105105
class WsjcppLogGlobalConf {
106106
public:
107107
WsjcppLogGlobalConf();
108-
~WsjcppLogGlobalConf();
109-
std::string g_WSJCPP_LOG_DIR;
110-
std::string g_WSJCPP_LOG_PREFIX_FILE;
111-
std::string g_WSJCPP_LOG_FILE;
112-
bool g_WSJCPP_ENABLE_LOG_FILE;
113-
long g_WSJCPP_LOG_START_TIME;
114-
long g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS;
115-
std::mutex logMutex;
116-
std::deque<std::string> * g_WSJCPP_LOG_LAST_MESSAGES;
117108
void doLogRotateUpdateFilename(bool bForce = false);
109+
std::mutex logMutex;
110+
std::string logDir;
111+
std::string logPrefixFile;
112+
std::string logFile;
113+
bool enableLogFile;
114+
long logStartTime;
115+
long logRotationPeriodInSeconds;
116+
std::deque<std::string> logLastMessages;
118117
};
119118

120119
class WsjcppLog {
121120
public:
122121
static WsjcppLogGlobalConf g_WSJCPP_LOG_GLOBAL_CONF;
123-
static std::string g_WSJCPP_LOG_DIR;
124-
static std::string g_WSJCPP_LOG_PREFIX_FILE;
125-
static std::string g_WSJCPP_LOG_FILE;
126-
static bool g_WSJCPP_ENABLE_LOG_FILE;
127-
static long g_WSJCPP_LOG_START_TIME;
128-
static long g_WSJCPP_LOG_ROTATION_PERIOD_IN_SECONDS;
129-
static std::deque<std::string> * g_WSJCPP_LOG_LAST_MESSAGES;
130-
static void doLogRotateUpdateFilename(bool bForce = false);
131122

132123
static void info(const std::string &sTag, const std::string &sMessage);
133124
static void err(const std::string &sTag, const std::string &sMessage);
@@ -139,8 +130,6 @@ class WsjcppLog {
139130
static void setPrefixLogFile(const std::string &sPrefixLogFile);
140131
static void setEnableLogFile(bool bEnable);
141132
static void setRotationPeriodInSec(long nRotationPeriodInSec);
142-
static void initGlobalVariables();
143-
static void deinitGlobalVariables();
144133

145134
private:
146135
static void add(WsjcppColorModifier &clr, const std::string &sType, const std::string &sTag, const std::string &sMessage);

0 commit comments

Comments
 (0)