///////////////////////////////////////////////////////////////////////////// // Name: Debug.cpp // Purpose: Define logging abilities for a PokéMod // Author: Ben Boeckel // Modified by: Ben Boeckel // Created: Wed Feb 14 23:44:39 2007 // Copyright: ©2007 Ben Boeckel and Nerdy Productions // Licence: // 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 // (at your option) 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, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ///////////////////////////////////////////////////////////////////////////// #include "Debug.h" #ifdef PM_DEBUG // Declare an instance of the debug window #ifdef PM_DEBUG_OUTPUT_DEBUG debugWindow debug = new debugWindow(); #endif extern int PMdebugLevel; void PokeMod::Log(const char *msg, int level) { // Actual strings of the debugging levels const char *PokeModDebugStr[8] = {"Emergency", "Alert", "Critical Error", "Error", "Warning", "Notice", "Info", "Debug"}; // Only log if wanted if (level <= PMdebugLevel) { // Get the current time time_t curTimeSec = time(NULL); PMString curTime = asctime(localtime(&curTimeSec)); curTime.erase(curTime.find('\n')); // Get the actual output message PMString output("%s (%s): %s", PokeModDebugStr[level], curTime.c_str(), msg); // Output to the command window # ifdef PM_DEBUG_OUTPUT_CONSOLE std::cout << output << std::endl; # endif // Output to the debugging console # ifdef PM_DEBUG_OUTPUT_DEBUG if (debug.m_Show[level].IsChecked()) debug.m_Debug.Append(output); # endif // Output to the debugging log # ifdef PM_DEBUG_OUTPUT_FILE std::ofstream flog("PokeMod.log", std::ios::app); // Output erros if the file fails if (!flog) { # ifdef PM_DEBUG_OUTPUT_CONSOLE std::cout << "Alert (" << curTime << "): Unable to open log file!\n"; # endif # ifdef PM_DEBUG_OUTPUT_DEBUG debug.m_Debug.Append(String("Alert (%s): Unable to open log file!", curTime)); # endif } else { flog << output << '\n'; flog.close(); } # endif } } #else // Empty function if debugging isn't wanted void PokeMod::Log(const PokeMod::String &msg, int level) { return; } #endif