diff options
author | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-07-04 12:13:01 +0200 |
---|---|---|
committer | Thorbjørn Lindeijer <bjorn@lindeijer.nl> | 2025-07-04 21:17:55 +0200 |
commit | 1debcc8032f01dd2bb64f2725143121b57320876 (patch) | |
tree | 85cba14f5309a487913c0c430811273343211f8f /src/client.cpp | |
parent | 3fb53be63095dad2ebcfd52d44f13d20f630e478 (diff) | |
download | mana-1debcc8032f01dd2bb64f2725143121b57320876.tar.gz mana-1debcc8032f01dd2bb64f2725143121b57320876.tar.bz2 mana-1debcc8032f01dd2bb64f2725143121b57320876.tar.xz mana-1debcc8032f01dd2bb64f2725143121b57320876.zip |
Added logging priorities and use SDLs logging facilities
By using SDL logging, we can rely on SDL to filter the log messages by
their priority before they get sent to our custom output function. For
example, we now no longer get entries for created and destroyed Window
instances by default, since these have only "debug" priority whereas the
default priority for the "app" category is "info".
We can also get log messages raised by SDL itself in our log now. Log
levels can be controlled per category through the "SDL_LOGGING"
environment variable.
Many existing log messages have been assigned a category based on their
existing prefix.
Diffstat (limited to 'src/client.cpp')
-rw-r--r-- | src/client.cpp | 143 |
1 files changed, 69 insertions, 74 deletions
diff --git a/src/client.cpp b/src/client.cpp index 03fbc184..7c8763a1 100644 --- a/src/client.cpp +++ b/src/client.cpp @@ -29,6 +29,7 @@ #include "game.h" #include "itemshortcut.h" #include "keyboardconfig.h" +#include "log.h" #include "playerrelations.h" #include "sound.h" @@ -96,7 +97,6 @@ LoginData loginData; Config config; /**< Global settings (config.xml) */ Configuration branding; /**< XML branding information reader */ Configuration paths; /**< XML default paths information reader */ -Logger *logger; /**< Log object */ ChatLogger *chatLogger; /**< Chat log object */ KeyboardConfig keyboard; @@ -176,8 +176,6 @@ Client::Client(const Options &options): assert(!mInstance); mInstance = this; - logger = new Logger; - // Set default values for configuration files branding.setDefaultValues(getBrandingDefaults()); paths.setDefaultValues(getPathsDefaults()); @@ -192,19 +190,18 @@ Client::Client(const Options &options): initHomeDir(); initConfiguration(); + // Configure logger + Log::init(); + Log::setLogFile(mLocalDataDir + "/mana.log"); + Log::setLogToStandardOut(config.logToStandardOut); + Log::info("%s", FULL_VERSION); + chatLogger = new ChatLogger; if (options.chatLogDir.empty()) chatLogger->setLogDir(mLocalDataDir + "/logs/"); else chatLogger->setLogDir(options.chatLogDir); - // Configure logger - logger->setLogFile(mLocalDataDir + "/mana.log"); - logger->setLogToStandardOut(config.logToStandardOut); - - // Log the mana version - logger->log("%s", FULL_VERSION); - initScreenshotDir(); #if SDL_VERSION_ATLEAST(2, 24, 0) @@ -212,10 +209,10 @@ Client::Client(const Options &options): #endif // Initialize SDL - logger->log("Initializing SDL..."); + Log::info("Initializing SDL..."); if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0) { - logger->error(strprintf("Could not initialize SDL: %s", + Log::critical(strprintf("Could not initialize SDL: %s", SDL_GetError())); } atexit(SDL_Quit); @@ -224,7 +221,7 @@ Client::Client(const Options &options): if (!FS::setWriteDir(mLocalDataDir)) { - logger->error(strprintf("%s couldn't be set as write directory! " + Log::critical(strprintf("%s couldn't be set as write directory! " "Exiting.", mLocalDataDir.c_str())); } @@ -287,7 +284,7 @@ Client::Client(const Options &options): iconFile += ".png"; #endif iconFile = ResourceManager::getPath(iconFile); - logger->log("Loading icon from file: %s", iconFile.c_str()); + Log::info("Loading icon from file: %s", iconFile.c_str()); #ifdef _WIN32 static SDL_SysWMinfo pInfo; SDL_GetWindowWMInfo(mVideo.window(), &pInfo); @@ -329,7 +326,7 @@ Client::Client(const Options &options): { mState = STATE_ERROR; errorMessage = err; - logger->log("Warning: %s", err); + Log::warn("%s", err); } // Initialize keyboard @@ -425,15 +422,13 @@ Client::~Client() SDL_FreeSurface(mIcon); - logger->log("Quitting"); + Log::info("Quitting"); delete userPalette; XML::Writer writer(mConfigDir + "/config.xml"); if (writer.isValid()) serialize(writer, config); - delete logger; - mInstance = nullptr; } @@ -499,7 +494,7 @@ int Client::exec() catch (gcn::Exception e) { const char *err = e.getMessage().c_str(); - logger->log("Warning: guichan input exception: %s", err); + Log::warn("Guichan input exception: %s", err); } } @@ -616,7 +611,7 @@ void Client::update() switch (mState) { case STATE_CHOOSE_SERVER: - logger->log("State: CHOOSE SERVER"); + Log::info("State: CHOOSE SERVER"); // Don't allow an alpha opacity // lower than the default value @@ -627,7 +622,7 @@ void Client::update() break; case STATE_CONNECT_SERVER: - logger->log("State: CONNECT SERVER"); + Log::info("State: CONNECT SERVER"); Net::connectToServer(mCurrentServer); @@ -636,7 +631,7 @@ void Client::update() break; case STATE_LOGIN: - logger->log("State: LOGIN"); + Log::info("State: LOGIN"); // Don't allow an alpha opacity // lower than the default value gui->getTheme()->setMinimumOpacity(0.8f); @@ -655,14 +650,14 @@ void Client::update() break; case STATE_LOGIN_ATTEMPT: - logger->log("State: LOGIN ATTEMPT"); + Log::info("State: LOGIN ATTEMPT"); accountLogin(&loginData); mCurrentDialog = new ConnectionDialog( _("Logging in"), STATE_SWITCH_SERVER); break; case STATE_WORLD_SELECT: - logger->log("State: WORLD SELECT"); + Log::info("State: WORLD SELECT"); { Worlds worlds = Net::getLoginHandler()->getWorlds(); @@ -684,13 +679,13 @@ void Client::update() break; case STATE_WORLD_SELECT_ATTEMPT: - logger->log("State: WORLD SELECT ATTEMPT"); + Log::info("State: WORLD SELECT ATTEMPT"); mCurrentDialog = new ConnectionDialog( _("Entering game world"), STATE_WORLD_SELECT); break; case STATE_UPDATE: - logger->log("State: UPDATE"); + Log::info("State: UPDATE"); if (mOptions.skipUpdate) { @@ -705,7 +700,7 @@ void Client::update() break; case STATE_LOAD_DATA: - logger->log("State: LOAD DATA"); + Log::info("State: LOAD DATA"); // If another data path has been set, // we don't load any other files... @@ -752,7 +747,7 @@ void Client::update() break; case STATE_GET_CHARACTERS: - logger->log("State: GET CHARACTERS"); + Log::info("State: GET CHARACTERS"); Net::getCharHandler()->requestCharacters(); mCurrentDialog = new ConnectionDialog( _("Requesting characters"), @@ -760,7 +755,7 @@ void Client::update() break; case STATE_CHAR_SELECT: - logger->log("State: CHAR SELECT"); + Log::info("State: CHAR SELECT"); // Don't allow an alpha opacity // lower than the default value gui->getTheme()->setMinimumOpacity(0.8f); @@ -785,7 +780,7 @@ void Client::update() break; case STATE_CONNECT_GAME: - logger->log("State: CONNECT GAME"); + Log::info("State: CONNECT GAME"); Net::getGameHandler()->connect(); mCurrentDialog = new ConnectionDialog( @@ -795,7 +790,7 @@ void Client::update() break; case STATE_CHANGE_MAP: - logger->log("State: CHANGE_MAP"); + Log::info("State: CHANGE_MAP"); Net::getGameHandler()->connect(); mCurrentDialog = new ConnectionDialog( @@ -804,7 +799,7 @@ void Client::update() break; case STATE_GAME: - logger->log("Memorizing selected character %s", + Log::info("Memorizing selected character %s", local_player->getName().c_str()); config.lastCharacter = local_player->getName(); @@ -822,52 +817,52 @@ void Client::update() mCurrentDialog = nullptr; - logger->log("State: GAME"); + Log::info("State: GAME"); mGame = new Game; break; case STATE_LOGIN_ERROR: - logger->log("State: LOGIN ERROR"); + Log::info("State: LOGIN ERROR"); showErrorDialog(errorMessage, STATE_LOGIN); break; case STATE_ACCOUNTCHANGE_ERROR: - logger->log("State: ACCOUNT CHANGE ERROR"); + Log::info("State: ACCOUNT CHANGE ERROR"); showErrorDialog(errorMessage, STATE_CHAR_SELECT); break; case STATE_REGISTER_PREP: - logger->log("State: REGISTER_PREP"); + Log::info("State: REGISTER_PREP"); Net::getLoginHandler()->getRegistrationDetails(); mCurrentDialog = new ConnectionDialog( _("Requesting registration details"), STATE_LOGIN); break; case STATE_REGISTER: - logger->log("State: REGISTER"); + Log::info("State: REGISTER"); mCurrentDialog = new RegisterDialog(&loginData); break; case STATE_REGISTER_ATTEMPT: - logger->log("Username is %s", loginData.username.c_str()); + Log::info("Username is %s", loginData.username.c_str()); Net::getLoginHandler()->registerAccount(&loginData); loginData.password.clear(); break; case STATE_CHANGEPASSWORD: - logger->log("State: CHANGE PASSWORD"); + Log::info("State: CHANGE PASSWORD"); mCurrentDialog = new ChangePasswordDialog(&loginData); break; case STATE_CHANGEPASSWORD_ATTEMPT: - logger->log("State: CHANGE PASSWORD ATTEMPT"); + Log::info("State: CHANGE PASSWORD ATTEMPT"); Net::getLoginHandler()->changePassword(loginData.username, loginData.password, loginData.newPassword); break; case STATE_CHANGEPASSWORD_SUCCESS: - logger->log("State: CHANGE PASSWORD SUCCESS"); + Log::info("State: CHANGE PASSWORD SUCCESS"); showOkDialog(_("Password Change"), _("Password changed successfully!"), STATE_CHAR_SELECT); @@ -876,35 +871,35 @@ void Client::update() break; case STATE_CHANGEEMAIL: - logger->log("State: CHANGE EMAIL"); + Log::info("State: CHANGE EMAIL"); mCurrentDialog = new ChangeEmailDialog(&loginData); break; case STATE_CHANGEEMAIL_ATTEMPT: - logger->log("State: CHANGE EMAIL ATTEMPT"); + Log::info("State: CHANGE EMAIL ATTEMPT"); Net::getLoginHandler()->changeEmail(loginData.email); break; case STATE_CHANGEEMAIL_SUCCESS: - logger->log("State: CHANGE EMAIL SUCCESS"); + Log::info("State: CHANGE EMAIL SUCCESS"); showOkDialog(_("Email Change"), _("Email changed successfully!"), STATE_CHAR_SELECT); break; case STATE_UNREGISTER: - logger->log("State: UNREGISTER"); + Log::info("State: UNREGISTER"); mCurrentDialog = new UnRegisterDialog(&loginData); break; case STATE_UNREGISTER_ATTEMPT: - logger->log("State: UNREGISTER ATTEMPT"); + Log::info("State: UNREGISTER ATTEMPT"); Net::getLoginHandler()->unregisterAccount( loginData.username, loginData.password); break; case STATE_UNREGISTER_SUCCESS: - logger->log("State: UNREGISTER SUCCESS"); + Log::info("State: UNREGISTER SUCCESS"); Net::getLoginHandler()->disconnect(); showOkDialog(_("Unregister Successful"), @@ -914,7 +909,7 @@ void Client::update() break; case STATE_SWITCH_SERVER: - logger->log("State: SWITCH SERVER"); + Log::info("State: SWITCH SERVER"); Net::getLoginHandler()->disconnect(); Net::getGameHandler()->disconnect(); @@ -924,7 +919,7 @@ void Client::update() break; case STATE_SWITCH_LOGIN: - logger->log("State: SWITCH LOGIN"); + Log::info("State: SWITCH LOGIN"); Net::getLoginHandler()->disconnect(); @@ -932,7 +927,7 @@ void Client::update() break; case STATE_SWITCH_CHARACTER: - logger->log("State: SWITCH CHARACTER"); + Log::info("State: SWITCH CHARACTER"); // Done with game Net::getGameHandler()->disconnect(); @@ -941,26 +936,26 @@ void Client::update() break; case STATE_LOGOUT_ATTEMPT: - logger->log("State: LOGOUT ATTEMPT"); + Log::info("State: LOGOUT ATTEMPT"); // TODO break; case STATE_WAIT: - logger->log("State: WAIT"); + Log::info("State: WAIT"); break; case STATE_EXIT: - logger->log("State: EXIT"); + Log::info("State: EXIT"); break; case STATE_FORCE_QUIT: - logger->log("State: FORCE QUIT"); + Log::info("State: FORCE QUIT"); mState = STATE_EXIT; break; case STATE_ERROR: - logger->log("State: ERROR"); - logger->log("Error: %s", errorMessage.c_str()); + Log::info("State: ERROR"); + Log::error("%s", errorMessage.c_str()); showErrorDialog(errorMessage, STATE_CHOOSE_SERVER); Net::getGameHandler()->disconnect(); break; @@ -1018,7 +1013,7 @@ void Client::initRootDir() Configuration portable; portable.init(portableName); - logger->log("Portable file: %s", portableName.c_str()); + Log::info("Portable file: %s", portableName.c_str()); if (mOptions.localDataDir.empty()) { @@ -1026,8 +1021,8 @@ void Client::initRootDir() if (!dir.empty()) { mOptions.localDataDir = mRootDir + dir; - logger->log("Portable data dir: %s", - mOptions.localDataDir.c_str()); + Log::info("Portable data dir: %s", + mOptions.localDataDir.c_str()); } } @@ -1037,8 +1032,8 @@ void Client::initRootDir() if (!dir.empty()) { mOptions.configDir = mRootDir + dir; - logger->log("Portable config dir: %s", - mOptions.configDir.c_str()); + Log::info("Portable config dir: %s", + mOptions.configDir.c_str()); } } @@ -1048,8 +1043,8 @@ void Client::initRootDir() if (!dir.empty()) { mOptions.screenshotDir = mRootDir + dir; - logger->log("Portable screenshot dir: %s", - mOptions.screenshotDir.c_str()); + Log::info("Portable screenshot dir: %s", + mOptions.screenshotDir.c_str()); } } } @@ -1081,7 +1076,7 @@ void Client::initHomeDir() if (mkdir_r(mLocalDataDir.c_str())) { - logger->error(strprintf(_("%s doesn't exist and can't be created! " + Log::critical(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), mLocalDataDir.c_str())); } @@ -1104,7 +1099,7 @@ void Client::initHomeDir() if (mkdir_r(mConfigDir.c_str())) { - logger->error(strprintf(_("%s doesn't exist and can't be created! " + Log::critical(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), mConfigDir.c_str())); } } @@ -1123,7 +1118,7 @@ void Client::initConfiguration() if (doc.rootNode() && doc.rootNode().name() == "configuration") deserialize(doc.rootNode(), config); else - logger->log("Couldn't read configuration file: %s", configPath.c_str()); + Log::info("Couldn't read configuration file: %s", configPath.c_str()); } /** @@ -1146,7 +1141,7 @@ bool Client::initUpdatesDir() if (mUpdateHost.empty()) { - logger->log("No update host provided"); + Log::info("No update host provided"); mUpdatesDir.clear(); mState = STATE_LOAD_DATA; return false; @@ -1154,8 +1149,8 @@ bool Client::initUpdatesDir() mUpdatesDir = "updates/" + getDirectoryFromURL(mUpdateHost); - logger->log("Update host: %s", mUpdateHost.c_str()); - logger->log("Updates dir: %s", mUpdatesDir.c_str()); + Log::info("Update host: %s", mUpdateHost.c_str()); + Log::info("Updates dir: %s", mUpdatesDir.c_str()); // Verify that the updates directory exists. Create if necessary. if (!FS::isDirectory(mUpdatesDir)) @@ -1175,16 +1170,16 @@ bool Client::initUpdatesDir() if (!CreateDirectory(newDir.c_str(), 0) && GetLastError() != ERROR_ALREADY_EXISTS) { - logger->log("Error: %s can't be made, but doesn't exist!", - newDir.c_str()); + Log::error("%s can't be made, but doesn't exist!", + newDir.c_str()); errorMessage = strprintf(_("Error creating updates directory!\n(%s)"), newDir.c_str()); mState = STATE_ERROR; } #else - logger->log("Error: %s/%s can't be made, but doesn't exist!", - mLocalDataDir.c_str(), mUpdatesDir.c_str()); + Log::error("%s/%s can't be made, but doesn't exist!", + mLocalDataDir.c_str(), mUpdatesDir.c_str()); errorMessage = strprintf(_("Error creating updates directory!\n(%s/%s)"), mLocalDataDir.c_str(), mUpdatesDir.c_str()); @@ -1230,7 +1225,7 @@ void Client::initScreenshotDir() void Client::accountLogin(LoginData *loginData) { - logger->log("Username is %s", loginData->username.c_str()); + Log::info("Username is %s", loginData->username.c_str()); // Send login infos if (loginData->registerLogin) |