Added ability to automatically log debug info to a debug logfile (respecting the new read / write configurable path)

This commit is contained in:
Mark Vejvoda 2010-03-23 06:57:41 +00:00
parent 1e7cd63330
commit ae10ab55b2
4 changed files with 36 additions and 1 deletions

View File

@ -402,6 +402,12 @@ when they are issued a command"/>
<enum value="false"/>
</enums>
</field>
<field type="String">
<name value="Debug LogFile"/>
<variable-name value="DebugLogFile"/>
<description value="Debug LogFile to save debug output"/>
<default value=""/>
</field>
<field type="IntRange">
<name value="AI log"/>
<variable-name value="AiLog"/>

View File

@ -167,6 +167,7 @@ int glestMain(int argc, char** argv){
Program *program= NULL;
ExceptionHandler exceptionHandler;
exceptionHandler.install( getCrashDumpFileName() );
string debugLogFile = "";
try{
Config &config = Config::getInstance();
@ -175,6 +176,11 @@ int glestMain(int argc, char** argv){
SystemFlags::enableNetworkDebugInfo = config.getBool("DebugNetwork","0");
SystemFlags::enableDebugText = config.getBool("DebugMode","0");
debugLogFile = config.getString("DebugLogFile","");
if(getGameReadWritePath() != "") {
debugLogFile = getGameReadWritePath() + debugLogFile;
}
SystemFlags::debugLogFile = debugLogFile.c_str();
NetworkInterface::setDisplayMessageFunction(ExceptionHandler::DisplayMessage);

View File

@ -29,6 +29,7 @@ public:
static bool enableDebugText;
static bool enableNetworkDebugInfo;
static const char *debugLogFile;
static void OutputDebug(DebugType type, const char *fmt, ...);
};

View File

@ -17,6 +17,7 @@
#include <cstring>
#include <cstdio>
#include <stdarg.h>
#include <fstream>
#include "leak_dumper.h"
@ -27,6 +28,7 @@ namespace Shared{ namespace Util{
bool SystemFlags::enableDebugText = false;
bool SystemFlags::enableNetworkDebugInfo = false;
const char * SystemFlags::debugLogFile = NULL;
void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) {
if((type == debugSystem && SystemFlags::enableDebugText == false) ||
@ -37,7 +39,27 @@ void SystemFlags::OutputDebug(DebugType type, const char *fmt, ...) {
va_list argList;
va_start(argList, fmt);
vprintf(fmt, argList);
// Either output to a logfile or
if(SystemFlags::debugLogFile != NULL && SystemFlags::debugLogFile[0] != 0) {
static ofstream fileStream;
if(fileStream.is_open() == false) {
printf("Opening logfile [%s]\n",SystemFlags::debugLogFile);
fileStream.open(SystemFlags::debugLogFile, ios_base::out | ios_base::trunc);
}
//printf("Logfile is open [%s]\n",SystemFlags::debugLogFile);
char szBuf[1024]="";
vsprintf(szBuf,fmt, argList);
//printf("writing to logfile [%s]\n",szBuf);
fileStream << szBuf;
fileStream.flush();
}
// output to console
else {
vprintf(fmt, argList);
}
va_end(argList);
}