From eeb8cc6a41e34f898ca1a2f26dad030d76d80daf Mon Sep 17 00:00:00 2001 From: David Anderson Date: Thu, 20 Sep 2007 17:19:16 +0000 Subject: [PATCH] improved fatal logging errors --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401450 --- core/Logger.cpp | 49 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 34 insertions(+), 15 deletions(-) diff --git a/core/Logger.cpp b/core/Logger.cpp index 4204275c..c383e0b6 100644 --- a/core/Logger.cpp +++ b/core/Logger.cpp @@ -139,7 +139,11 @@ void Logger::_NewMapFile() FILE *fp = fopen(m_NrmFileName.c_str(), "w"); if (!fp) { - g_SMAPI->ConPrint("[SM] Unexpected fatal logging error. SourceMod logging disabled.\n"); + char error[255]; + g_LibSys.GetPlatformError(error, sizeof(error)); + LogFatal("[SM] Unexpected fatal logging error (file \"%s\")", m_NrmFileName.c_str()); + LogFatal("[SM] Platform returned error: \"%s\"", error); + LogFatal("[SM] Logging has been disabled."); m_Active = false; return; } else { @@ -332,7 +336,11 @@ void Logger::LogMessage(const char *vafmt, ...) return; print_error: - g_SMAPI->ConPrint("[SM] Unexpected fatal logging error. SourceMod logging disabled.\n"); + char error[255]; + g_LibSys.GetPlatformError(error, sizeof(error)); + LogFatal("[SM] Unexpected fatal logging error (file \"%s\")", m_NrmFileName.c_str()); + LogFatal("[SM] Platform returned error: \"%s\"", error); + LogFatal("[SM] Logging has been disabled."); m_Active = false; } @@ -373,7 +381,11 @@ void Logger::LogError(const char *vafmt, ...) va_end(ap); fclose(fp); } else { - g_SMAPI->ConPrint("[SM] Unexpected fatal logging error. SourceMod logging disabled.\n"); + char error[255]; + g_LibSys.GetPlatformError(error, sizeof(error)); + LogFatal("[SM] Unexpected fatal logging error (file \"%s\")", m_NrmFileName.c_str()); + LogFatal("[SM] Platform returned error: \"%s\"", error); + LogFatal("[SM] Logging has been disabled."); m_Active = false; return; } @@ -474,21 +486,28 @@ void Logger::LogFatal(const char *msg, ...) * It's already implemented twice which is bad. */ + va_list ap; + char buffer[3072]; + + va_start(ap, msg); + UTIL_FormatArgs(buffer, sizeof(buffer), msg, ap); + va_end(ap); + + char date[32]; + time_t t; + GetAdjustedTime(&t); + tm *curtime = localtime(&t); + strftime(date, sizeof(date), "%m/%d/%Y - %H:%M:%S", curtime); + + g_SMAPI->ConPrintf("L %s: %s\n", date, buffer); + char path[PLATFORM_MAX_PATH]; g_SourceMod.BuildPath(Path_Game, path, sizeof(path), "sourcemod_fatal.log"); FILE *fp = fopen(path, "at"); - if (!fp) + if (fp) { - /* We're just doomed, aren't we... */ - return; + fprintf(fp, "%s\n", buffer); + fclose(fp); } - - va_list ap; - va_start(ap, msg); - vfprintf(fp, msg, ap); - va_end(ap); - - fputs("\n", fp); - - fclose(fp); } +