From b7103fbcef86554476871ad363e2a6b3bad0b77e Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 13 Nov 2011 19:58:04 +0300 Subject: Change chat logs dirs format to yyyy-mm/dd/file.log. --- src/chatlogger.cpp | 64 ++++++++++++++++++++++----------------------- src/chatlogger.h | 14 +++++----- src/client.cpp | 4 +-- src/net/ea/partyhandler.cpp | 1 + 4 files changed, 43 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/chatlogger.cpp b/src/chatlogger.cpp index 067265138..0299a6fe3 100644 --- a/src/chatlogger.cpp +++ b/src/chatlogger.cpp @@ -40,11 +40,16 @@ #include "logger.h" #include "configuration.h" +#include "utils/mkdir.h" #include "utils/stringutils.h" #include "debug.h" -ChatLogger::ChatLogger() +ChatLogger::ChatLogger() : + mLogDir(""), + mBaseLogDir(""), + mServerName(""), + mLogFileName("") { } @@ -60,6 +65,7 @@ void ChatLogger::setLogFile(const std::string &logFilename) mLogFile.close(); mLogFile.open(logFilename.c_str(), std::ios_base::app); + mLogFileName = logFilename; if (!mLogFile.is_open()) { @@ -77,19 +83,19 @@ void ChatLogger::setLogDir(const std::string &logDir) DIR *dir = opendir(mLogDir.c_str()); if (!dir) - makeDir(mLogDir); + mkdir_r(mLogDir.c_str()); else closedir(dir); } void ChatLogger::log(std::string str) { - std::string dateStr = getDateString(); - if (!mLogFile.is_open() || dateStr != mLogDate) + std::string dateStr = getDir(); + std::string logFileName = strprintf("%s/#General.log", dateStr.c_str()); + if (!mLogFile.is_open() || logFileName != mLogFileName) { - mLogDate = dateStr; - setLogFile(strprintf("%s/%s/#General_%s.log", mLogDir.c_str(), - mServerName.c_str(), dateStr.c_str())); + setLogDir(dateStr); + setLogFile(logFileName); } str = removeColors(str); @@ -99,21 +105,21 @@ void ChatLogger::log(std::string str) void ChatLogger::log(std::string name, std::string str) { std::ofstream logFile; - logFile.open(strprintf("%s/%s/%s_%s.log", mLogDir.c_str(), - mServerName.c_str(), secureName(name).c_str(), - getDateString().c_str()).c_str(), std::ios_base::app); + std::string dateStr = getDir(); + std::string logFileName = strprintf("%s/%s.log", + dateStr.c_str(), secureName(name).c_str()); - if (!logFile.is_open()) - return; + if (!mLogFile.is_open() || logFileName != mLogFileName) + { + setLogDir(dateStr); + setLogFile(logFileName); + } str = removeColors(str); - writeTo(logFile, str); - - if (logFile.is_open()) - logFile.close(); + writeTo(mLogFile, str); } -std::string ChatLogger::getDateString() const +std::string ChatLogger::getDir() const { std::string date; @@ -124,8 +130,11 @@ std::string ChatLogger::getDateString() const time (&rawtime); timeinfo = localtime(&rawtime); - strftime(buffer, 79, "%y-%m-%d", timeinfo); - date = buffer; + strftime(buffer, 79, "%Y-%m/%d", timeinfo); + + date = strprintf("%s/%s/%s", mBaseLogDir.c_str(), + mServerName.c_str(), buffer); + return date; } @@ -164,29 +173,20 @@ void ChatLogger::setServerName(const std::string &serverName) { DIR *dir = opendir((mLogDir + "/" + mServerName).c_str()); if (!dir) - makeDir(mLogDir + "/" + mServerName); + mkdir_r((mLogDir + "/" + mServerName).c_str()); else closedir(dir); } } -void ChatLogger::makeDir(const std::string &dir) -{ -#ifdef WIN32 - mkdir(dir.c_str()); -#else - mkdir(dir.c_str(), 0750); -#endif -} - void ChatLogger::loadLast(std::string name, std::list &list, unsigned n) { std::ifstream logFile; + std::string fileName = strprintf("%s/%s.log", getDir().c_str(), + secureName(name).c_str()); - logFile.open(strprintf("%s/%s/%s_%s.log", mLogDir.c_str(), - mServerName.c_str(), secureName(name).c_str(), - getDateString().c_str()).c_str(), std::ios::in); + logFile.open(fileName.c_str(), std::ios::in); if (!logFile.is_open()) return; diff --git a/src/chatlogger.h b/src/chatlogger.h index 6e096ac89..23d5d4a86 100644 --- a/src/chatlogger.h +++ b/src/chatlogger.h @@ -40,8 +40,6 @@ class ChatLogger */ ~ChatLogger(); - void setLogDir(const std::string &logDir); - /** * Enters a message in the log. The message will be timestamped. */ @@ -52,26 +50,30 @@ class ChatLogger void loadLast(std::string name, std::list &list, unsigned n); - std::string getDateString() const; + std::string getDir() const; std::string secureName(std::string &str) const; void setServerName(const std::string &serverName); + void setBaseLogDir(const std::string &logDir) + { mBaseLogDir = logDir; } + private: /** * Sets the file to log to and opens it */ void setLogFile(const std::string &logFilename); - void writeTo(std::ofstream &file, const std::string &str) const; + void setLogDir(const std::string &logDir); - void makeDir(const std::string &dir); + void writeTo(std::ofstream &file, const std::string &str) const; std::ofstream mLogFile; std::string mLogDir; + std::string mBaseLogDir; std::string mServerName; - std::string mLogDate; + std::string mLogFileName; }; extern ChatLogger *chatLogger; diff --git a/src/client.cpp b/src/client.cpp index 8a6ec2116..7de58368c 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -322,9 +322,9 @@ Client::Client(const Options &options): chatLogger = new ChatLogger; if (mOptions.chatLogDir == "") - chatLogger->setLogDir(mLocalDataDir + std::string("/logs/")); + chatLogger->setBaseLogDir(mLocalDataDir + std::string("/logs/")); else - chatLogger->setLogDir(mOptions.chatLogDir); + chatLogger->setBaseLogDir(mOptions.chatLogDir); logger->setLogToStandardOut(config.getBoolValue("logToStandardOut")); diff --git a/src/net/ea/partyhandler.cpp b/src/net/ea/partyhandler.cpp index 5fa0df29b..8373cb1c4 100644 --- a/src/net/ea/partyhandler.cpp +++ b/src/net/ea/partyhandler.cpp @@ -225,6 +225,7 @@ void PartyHandler::processPartySettings(Net::MessageIn &msg) return; Ea::partyTab = new PartyTab(); + Ea::partyTab->loadFromLogFile("#Party"); } // These seem to indicate the sharing mode for exp and items -- cgit v1.2.3-70-g09d2