From 0037a0c6c0dfebf3ecb170ca9d59de6b9274ce41 Mon Sep 17 00:00:00 2001
From: Ykkrosh Main Log
Engine exited successfully on " << __DATE__; m_MainLog << " at " << __TIME__ << buffer << "
\n"; - m_MainLog << FOOTER; + m_MainLog << html_footer; + m_MainLog.close (); + m_InterestingLog << "Engine exited successfully on " << __DATE__; + m_InterestingLog << " at " << __TIME__ << buffer << "
\n"; + m_InterestingLog << html_footer; + m_InterestingLog.close (); + + //Add end marker to logs in memory m_CurrentPosition = '\0'; - m_DetailedLog << MEMORY_HEADER; - m_DetailedLog << "Memory Log started with capacity of " << \ + m_MemoryLog << html_header0 << "Memory log" << html_header1; + m_MemoryLog << "
Memory Log started with capacity of " << \ MEMORY_BUFFER_SIZE << " characters.
\n"; - m_DetailedLog << m_MemoryLog; - m_DetailedLog << FOOTER; + m_MemoryLog << m_MemoryLogBuffer; + m_MemoryLog << html_footer; - m_DetailedLog.close (); + m_MemoryLog.close (); - m_MainLog.close (); - - free(m_MemoryLog); + free(m_MemoryLogBuffer); } -void CLogger::WriteMessage(const char *message) +void CLogger::WriteMessage(const char *message, int interestedness) { -#ifdef CONSOLE_DEBUG - if (g_Console) g_Console->InsertMessage(L"LOG: %hs", message); -#endif m_NumberOfMessages++; + + if (interestedness >= 2) + { + if (g_Console) g_Console->InsertMessage(L"LOG: %hs", message); + m_InterestingLog << "" << message << "
\n"; + m_InterestingLog.flush(); + } m_MainLog << "" << message << "
\n"; - m_MainLog.flush(); } -void CLogger::WriteError(const char *message) +void CLogger::WriteError(const char *message, int interestedness) { -#ifdef CONSOLE_DEBUG - if (g_Console) g_Console->InsertMessage(L"ERROR: %hs", message); -#endif - debug_out("ERROR: %s\n", message); m_NumberOfErrors++; + debug_out("ERROR: %s\n", message); + if (interestedness >= 1) + { + if (g_Console) g_Console->InsertMessage(L"ERROR: %hs", message); + m_InterestingLog << "ERROR: "<< message << "
\n"; + m_InterestingLog.flush(); + } m_MainLog << "ERROR: "<< message << "
\n"; m_MainLog.flush(); } -void CLogger::WriteWarning(const char *message) +void CLogger::WriteWarning(const char *message, int interestedness) { -#ifdef CONSOLE_DEBUG - if (g_Console) g_Console->InsertMessage(L"WARNING: %hs", message); -#endif m_NumberOfWarnings++; + if (interestedness >= 1) + { + if (g_Console) g_Console->InsertMessage(L"WARNING: %hs", message); + m_InterestingLog << "WARNING: "<< message << "
\n"; + m_InterestingLog.flush(); + } m_MainLog << "WARNING: "<< message << "
\n"; - m_MainLog.flush(); } -void CLogger::Log(ELogMethod method, const char *fmt, ...) +void CLogger::Log(ELogMethod method, const char* category, const char *fmt, ...) { va_list argp; char buffer[512]; @@ -132,13 +142,13 @@ void CLogger::Log(ELogMethod method, const char *fmt, ...) va_end(argp); if(method == NORMAL) - WriteMessage(buffer); + WriteMessage(buffer, Interestedness(category)); else if(method == ERROR) - WriteError(buffer); + WriteError(buffer, Interestedness(category)); else if(method == WARNING) - WriteWarning(buffer); + WriteWarning(buffer, Interestedness(category)); else - WriteMessage(buffer); + WriteMessage(buffer, Interestedness(category)); } void CLogger::QuickLog(const char *fmt, ...) @@ -157,7 +167,7 @@ void CLogger::QuickLog(const char *fmt, ...) //add some html formatting strcat(buffer,""); - if((m_CurrentPosition - m_MemoryLog + strlen(buffer) + 1) >= MEMORY_BUFFER_SIZE) + if((m_CurrentPosition - m_MemoryLogBuffer + strlen(buffer) + 1) >= MEMORY_BUFFER_SIZE) { //not enough room in the buffer so don't log. return; @@ -176,3 +186,23 @@ void CLogger::QuickLog(const char *fmt, ...) free(buffer); } +int CLogger::Interestedness(const char* category) +{ + // This could be cached, but reading from the config DB every time allows + // easy run-time alteration of interest levels (and shouldn't be particularly + // slow) + + // If the config DB hasn't been loaded, assume the default + if (! g_ConfigDB.IsInitialised()) + return 1; + + CConfigValue* v = g_ConfigDB.GetValue(CFG_SYSTEM, CStr("loginterest.")+category); + if (!v) + return 1; + + int level; + if (! v->GetInt(level)) + return 1; + + return level; +} diff --git a/source/ps/CLogger.h b/source/ps/CLogger.h index 80ca03c9fa..96b0f9cc77 100755 --- a/source/ps/CLogger.h +++ b/source/ps/CLogger.h @@ -26,12 +26,12 @@ public: virtual ~CLogger(); //Functions to write different message types - void WriteMessage(const char *message); - void WriteError(const char *message); - void WriteWarning(const char *message); + void WriteMessage(const char *message, int interestedness); + void WriteError (const char *message, int interestedness); + void WriteWarning(const char *message, int interestedness); //Function to log stuff to file - void Log(ELogMethod method, const char* fmt, ...); + void Log(ELogMethod method, const char* category, const char *fmt, ...); //Function to log stuff to memory buffer void QuickLog(const char *fmt, ...); @@ -42,17 +42,22 @@ private: CLogger(const CLogger& init); CLogger& operator=(const CLogger& rhs); - //the two filestreams + //the three filestreams std::ofstream m_MainLog; - std::ofstream m_DetailedLog; + std::ofstream m_InterestingLog; + std::ofstream m_MemoryLog; //vars to hold message counts int m_NumberOfMessages; int m_NumberOfErrors; int m_NumberOfWarnings; + // Returns how interesting this category is to the user + // (0 = no messages, 1(default) = warnings/errors, 2 = all) + int Interestedness(const char* category); + //this holds the start of the memory buffer. - char *m_MemoryLog; + char *m_MemoryLogBuffer; //this holds the next available place to write to. char *m_CurrentPosition; };