diff options
Diffstat (limited to 'src/logger.cpp')
-rw-r--r-- | src/logger.cpp | 493 |
1 files changed, 0 insertions, 493 deletions
diff --git a/src/logger.cpp b/src/logger.cpp deleted file mode 100644 index c8317f808..000000000 --- a/src/logger.cpp +++ /dev/null @@ -1,493 +0,0 @@ -/* - * The ManaPlus Client - * Copyright (C) 2004-2009 The Mana World Development Team - * Copyright (C) 2009-2010 The Mana Developers - * Copyright (C) 2011-2017 The ManaPlus Developers - * - * This file is part of The ManaPlus Client. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "logger.h" - -#include "settings.h" - -#include "listeners/debugmessagelistener.h" - -#include "utils/cast.h" -#include "utils/foreach.h" -#include "utils/stringutils.h" - -#include <iostream> - -#ifdef WIN32 -#include <windows.h> -#elif defined __APPLE__ -#include <Carbon/Carbon.h> -#endif // WIN32 - -#include <sys/time.h> - -#include <sstream> - -#ifdef USE_SDL2 -#include <SDL_messagebox.h> -#endif // USE_SDl2 - -#ifdef ENABLEDEBUGLOG -#if defined(__ANDROID__) -#include <android/log.h> -#ifdef SPECIAL_LOGGING -#define SPECIALLOG(x) __android_log_print(ANDROID_LOG_INFO, "manaplus", x); -#define DSPECIALLOG(x) __android_log_print(ANDROID_LOG_VERBOSE, \ - "manaplus", x); -#else // SPECIAL_LOGGING -#define SPECIALLOG(x) if (mDebugLog) \ - __android_log_print(ANDROID_LOG_INFO, "manaplus", x); -#define DSPECIALLOG(x) if (mDebugLog) \ - __android_log_print(ANDROID_LOG_VERBOSE, "manaplus", x); -#endif // SPECIAL_LOGGING -#elif defined __native_client__ -#ifdef SPECIAL_LOGGING -#define SPECIALLOG(x) std::cerr << x; -#define DSPECIALLOG(x) std::cerr << x; -#else // SPECIAL_LOGGING -#define SPECIALLOG(x) if (mDebugLog) \ - std::cerr << x; -#define DSPECIALLOG(x) if (mDebugLog) \ - std::cerr << x; -#endif // SPECIAL_LOGGING -#else // defined(__ANDROID__) -#define SPECIALLOG(x) -#define DSPECIALLOG(x) -#endif // defined(__ANDROID__) -#endif // ENABLEDEBUGLOG - -#include "debug.h" - -#define DATESTREAM \ - timeStr << "[" \ - << ((((tv.tv_sec / 60) / 60) % 24 < 10) ? "0" : "") \ - << CAST_S32(((tv.tv_sec / 60) / 60) % 24) \ - << ":" \ - << (((tv.tv_sec / 60) % 60 < 10) ? "0" : "") \ - << CAST_S32((tv.tv_sec / 60) % 60) \ - << ":" \ - << ((tv.tv_sec % 60 < 10) ? "0" : "") \ - << CAST_S32(tv.tv_sec % 60) \ - << "." \ - << (((tv.tv_usec / 10000) % 100) < 10 ? "0" : "") \ - << CAST_S32((tv.tv_usec / 10000) % 100) \ - << "] "; - -Logger *logger = nullptr; // Log object - -Logger::Logger() : - mLogFile(), - mDelayedLog(), - mMutex(SDL_CreateMutex()), - mThreadLocked(false), - mLogToStandardOut(true), - mDebugLog(false), - mReportUnimplemented(false) -{ -#if defined __native_client__ && defined(NACL_LOG) - std::cout.setf(std::ios_base::unitbuf); -#endif // defined __native_client__ && defined(NACL_LOG) -} - -Logger::~Logger() -{ - if (mLogFile.is_open()) - mLogFile.close(); - SDL_DestroyMutex(mMutex); -} - -void Logger::setLogFile(const std::string &logFilename) -{ - if (mLogFile.is_open()) - mLogFile.close(); - - mLogFile.open(logFilename.c_str(), std::ios_base::trunc); - - if (!mLogFile.is_open()) - { - std::cout << "Warning: error while opening " << logFilename << - " for writing.\n"; - mLogToStandardOut = true; - } - else - { - mLogToStandardOut = false; - } -} - -void Logger::log(const std::string &str) -{ - log("%s", str.c_str()); -} - -#ifdef ENABLEDEBUGLOG -void Logger::dlog(const std::string &str) -{ - if (!mDebugLog) - return; - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - DSPECIALLOG(str.c_str()) - - if (mLogFile.is_open()) - mLogFile << timeStr.str() << str << std::endl; - - if (mLogToStandardOut) - std::cout << timeStr.str() << str << std::endl; -} - -void Logger::dlog2(const std::string &str, - const int pos, - const char* const comment) -{ - if (!mDebugLog) - return; - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - DSPECIALLOG(str.c_str()) - - if (mLogFile.is_open()) - { - if (comment != nullptr) - { - mLogFile << timeStr.str(); - mLogFile.fill('0'); - mLogFile.width(4); - mLogFile << pos << " "; - mLogFile << str << ": " << comment << std::endl; - } - else - { - mLogFile << timeStr.str(); - mLogFile.fill('0'); - mLogFile.width(4); - mLogFile << pos << " "; - mLogFile << str << std::endl; - } - } - - if (mLogToStandardOut) - { - if (comment != nullptr) - { - std::cout << timeStr.str(); - std::cout.fill('0'); - std::cout.width(4); - std::cout << pos << " "; - std::cout << str << ": " << comment << std::endl; - } - else - { - std::cout << timeStr.str(); - std::cout.fill('0'); - std::cout.width(4); - std::cout << pos << " "; - std::cout << str << std::endl; - } - } -} -#endif // ENABLEDEBUGLOG - -void Logger::log1(const char *const buf) -{ - if (settings.disableLoggingInGame) - return; - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - SPECIALLOG(buf) - - if (mLogFile.is_open()) - mLogFile << timeStr.str() << buf << std::endl; - - if (mLogToStandardOut) - std::cout << timeStr.str() << buf << std::endl; -} - -void Logger::log(const char *const log_text, ...) -{ - if (settings.disableLoggingInGame) - return; - - unsigned size = 1024; - if (strlen(log_text) * 3 > size) - size = CAST_U32(strlen(log_text) * 3); - - char* buf = new char[CAST_SIZE(size + 1)]; - va_list ap; - - // Use a temporary buffer to fill in the variables - va_start(ap, log_text); - vsnprintf(buf, size, log_text, ap); - buf[size] = 0; - va_end(ap); - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - SPECIALLOG(buf) - - if (mLogFile.is_open()) - mLogFile << timeStr.str() << buf << std::endl; - - if (mLogToStandardOut) - std::cout << timeStr.str() << buf << std::endl; - - // Delete temporary buffer - delete [] buf; -} - -void Logger::assertLog(const char *const log_text, ...) -{ - if (settings.disableLoggingInGame) - return; - - unsigned size = 1024; - if (strlen(log_text) * 3 > size) - size = CAST_U32(strlen(log_text) * 3); - - char* buf = new char[CAST_SIZE(size + 1)]; - va_list ap; - - // Use a temporary buffer to fill in the variables - va_start(ap, log_text); - vsnprintf(buf, size, log_text, ap); - buf[size] = 0; - va_end(ap); - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - SPECIALLOG(buf) - - if (mLogFile.is_open()) - mLogFile << timeStr.str() << buf << std::endl; - - if (mLogToStandardOut) - std::cout << timeStr.str() << buf << std::endl; - - DebugMessageListener::distributeEvent(buf); - - // Delete temporary buffer - delete [] buf; -} - -void Logger::log_r(const char *const log_text, ...) -{ - if (settings.disableLoggingInGame) - return; - - SDL_mutexP(mMutex); - - unsigned size = 1024; - if (strlen(log_text) * 3 > size) - size = CAST_U32(strlen(log_text) * 3); - - char* buf = new char[CAST_SIZE(size + 1)]; - va_list ap; - - // Use a temporary buffer to fill in the variables - va_start(ap, log_text); - vsnprintf(buf, size, log_text, ap); - buf[size] = 0; - va_end(ap); - - // Get the current system time - timeval tv; - gettimeofday(&tv, nullptr); - - // Print the log entry - std::stringstream timeStr; - DATESTREAM - SPECIALLOG(buf) - - if (mLogFile.is_open()) - { - timeStr << buf; - mThreadLocked = true; - mDelayedLog.push_back(timeStr.str()); - mThreadLocked = false; - } - - if (mLogToStandardOut) - std::cout << timeStr.str() << buf << std::endl; - - // Delete temporary buffer - delete [] buf; - - SDL_mutexV(mMutex); -} - -void Logger::flush() -{ - if (!mThreadLocked) - { - SDL_mutexP(mMutex); - FOR_EACH (STD_VECTOR<std::string>::const_iterator, it, mDelayedLog) - mLogFile << *it << std::endl; - mDelayedLog.clear(); - SDL_mutexV(mMutex); - } -} - -// here string must be safe for any usage -void Logger::safeError(const std::string &error_text) -{ - log("Error: %s", error_text.c_str()); -#ifdef USE_SDL2 - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, - "Error", - error_text.c_str(), - nullptr); -#else // USE_SDL2 -#ifdef WIN32 - MessageBox(nullptr, error_text.c_str(), "Error", MB_ICONERROR | MB_OK); -#elif defined __APPLE__ -// Str255 msg; -// CFStringRef error; -// error = CFStringCreateWithCString(nullptr, -// error_text.c_str(), -// kCFStringEncodingMacRoman); -// CFStringGetPascalString(error, msg, 255, kCFStringEncodingMacRoman); -// StandardAlert(kAlertStopAlert, -// (const unsigned char*)"\pError", -// (ConstStr255Param) msg, nullptr, nullptr); -#elif defined(__linux__) || defined(__linux) - std::cerr << "Error: " << error_text << std::endl; - const std::string msg = std::string("xmessage \"").append( - error_text).append("\""); - if (system(msg.c_str()) == -1) - std::cerr << "Error: " << error_text << std::endl; -#else // WIN32 - - std::cerr << "Error: " << error_text << std::endl; -#endif // WIN32 -#endif // USE_SDL2 - - exit(1); -} - -// here string can be unsafe strings -void Logger::error(const std::string &error_text) -{ - log("Error: %s", error_text.c_str()); -#ifdef USE_SDL2 - SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, - "Error", - error_text.c_str(), - nullptr); -#else // USE_SDL2 -#ifdef WIN32 - MessageBox(nullptr, error_text.c_str(), "Error", MB_ICONERROR | MB_OK); -#elif defined __APPLE__ -// Str255 msg; -// CFStringRef error; -// error = CFStringCreateWithCString(nullptr, -// error_text.c_str(), -// kCFStringEncodingMacRoman); -// CFStringGetPascalString(error, msg, 255, kCFStringEncodingMacRoman); -// StandardAlert(kAlertStopAlert, -// (const unsigned char*)"\pError", -// (ConstStr255Param) msg, nullptr, nullptr); -#elif defined(__linux__) || defined(_linux) - std::cerr << "Error: " << error_text << std::endl; - const std::string msg("xmessage \"Error happened. " - "Please see log file for more information.\""); - if (system(msg.c_str()) == -1) - std::cerr << "Error: " << error_text << std::endl; -#else // WIN32 - - std::cerr << "Error: " << error_text << std::endl; -#endif // WIN32 -#endif // USE_SDL2 - - exit(1); -} - -void Logger::unimplemented(const int id) -{ - if (!mReportUnimplemented) - return; - - const std::string str = strprintf("Unimplimented packet: %d (0x%x)", - id, - CAST_U32(id)); - DebugMessageListener::distributeEvent(str); - log(str); -} - -void Logger::unimplemented(const int id, - const int id2) -{ - if (!mReportUnimplemented) - return; - - const std::string str = strprintf( - "Unimplimented field value %d for packet %d (0x%x)", - id2, - id, - CAST_U32(id)); - DebugMessageListener::distributeEvent(str); - log(str); -} - -void Logger::unimplemented(const uint32_t id, - const uint32_t id2, - const uint32_t id3) const -{ - if (!mReportUnimplemented) - return; - - const std::string str = strprintf( - "Wrong actual or planned inbound packet size!. " - "Packet id: %u(0x%x), Planned size: %u, Actual size: %u", - id, - id, - id2, - id3); - DebugMessageListener::distributeEvent(str); -} |