Kaynağa Gözat

log: fixed to not print twice, enabled coloring, added OS print logging as its own type

bunnei 12 yıl önce
ebeveyn
işleme
6fc62f8c93

+ 6 - 10
src/common/console_listener.cpp

@@ -259,14 +259,17 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text)
 
     switch (Level)
     {
+    case OS_LEVEL: // light yellow
+        Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
+        break;
     case NOTICE_LEVEL: // light green
         Color = FOREGROUND_GREEN | FOREGROUND_INTENSITY;
         break;
     case ERROR_LEVEL: // light red
         Color = FOREGROUND_RED | FOREGROUND_INTENSITY;
         break;
-    case WARNING_LEVEL: // light yellow
-        Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
+    case WARNING_LEVEL: // light purple
+        Color = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
         break;
     case INFO_LEVEL: // cyan
         Color = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY;
@@ -278,15 +281,8 @@ void ConsoleListener::Log(LogTypes::LOG_LEVELS Level, const char *Text)
         Color = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE;
         break;
     }
-    if (strlen(Text) > 10)
-    {
-        // First 10 chars white
-        SetConsoleTextAttribute(hConsole, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
-        WriteConsole(hConsole, Text, 10, &cCharsWritten, NULL);
-        Text += 10;
-    }
     SetConsoleTextAttribute(hConsole, Color);
-    WriteConsole(hConsole, Text, (DWORD)strlen(Text), &cCharsWritten, NULL);
+    printf(Text);
 #else
     char ColorAttr[16] = "";
     char ResetAttr[16] = "";

+ 19 - 12
src/common/log.h

@@ -7,11 +7,14 @@
 
 #define LOGGING
 
-#define    NOTICE_LEVEL  1  // VERY important information that is NOT errors. Like startup and OSReports.
-#define    ERROR_LEVEL   2  // Critical errors 
-#define    WARNING_LEVEL 3  // Something is suspicious.
-#define    INFO_LEVEL    4  // General information.
-#define    DEBUG_LEVEL   5  // Detailed debugging - might make things slow.
+enum {
+    OS_LEVEL,       // Printed by the emulated operating system
+    NOTICE_LEVEL,   // VERY important information that is NOT errors. Like startup and OSReports.
+    ERROR_LEVEL,    // Critical errors 
+    WARNING_LEVEL,  // Something is suspicious.
+    INFO_LEVEL,     // General information.
+    DEBUG_LEVEL,    // Detailed debugging - might make things slow.
+};
 
 namespace LogTypes
 {
@@ -70,6 +73,7 @@ enum LOG_TYPE {
 
 // FIXME: should this be removed?
 enum LOG_LEVELS {
+    LOS = OS_LEVEL,
     LNOTICE = NOTICE_LEVEL,
     LERROR = ERROR_LEVEL,
     LWARNING = WARNING_LEVEL,
@@ -82,8 +86,8 @@ enum LOG_LEVELS {
 
 }  // namespace
 
-void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type,
-        const char *file, int line, const char *fmt, ...)
+void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type, const char*file, int line, 
+    const char* function, const char* fmt, ...)
 #ifdef __GNUC__
         __attribute__((format(printf, 5, 6)))
 #endif
@@ -97,16 +101,19 @@ void GenericLog(LOGTYPES_LEVELS level, LOGTYPES_TYPE type,
 #endif // loglevel
 #endif // logging
 
-#ifdef GEKKO
-#define GENERIC_LOG(t, v, ...)
-#else
+#ifdef _WIN32
+#ifndef __func__
+#define __func__ __FUNCTION__
+#endif
+#endif
+
 // Let the compiler optimize this out
 #define GENERIC_LOG(t, v, ...) { \
     if (v <= MAX_LOGLEVEL) \
-        GenericLog(v, t, __FILE__, __LINE__, __VA_ARGS__); \
+        GenericLog(v, t, __FILE__, __LINE__, __func__, __VA_ARGS__); \
     }
-#endif
 
+#define OS_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LOS, __VA_ARGS__) } while (0)
 #define ERROR_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LERROR, __VA_ARGS__) } while (0)
 #define WARN_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LWARNING, __VA_ARGS__) } while (0)
 #define NOTICE_LOG(t,...) do { GENERIC_LOG(LogTypes::t, LogTypes::LNOTICE, __VA_ARGS__) } while (0)

+ 15 - 13
src/common/log_manager.cpp

@@ -10,14 +10,16 @@
 #include "common/thread.h"
 #include "common/file_util.h"
 
-void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, 
-        const char *file, int line, const char* fmt, ...)
+void GenericLog(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, 
+    const char* function, const char* fmt, ...)
 {
     va_list args;
     va_start(args, fmt);
-    if (LogManager::GetInstance())
+
+    if (LogManager::GetInstance()) {
         LogManager::GetInstance()->Log(level, type,
-            file, line, fmt, args);
+            file, line, function, fmt, args);
+    }
     va_end(args);
 }
 
@@ -88,6 +90,8 @@ LogManager::LogManager()
             m_Log[i]->AddListener(m_debuggerLog);
 #endif
     }
+
+    m_consoleLog->Open();
 }
 
 LogManager::~LogManager()
@@ -107,8 +111,8 @@ LogManager::~LogManager()
     delete m_debuggerLog;
 }
 
-void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, 
-    const char *file, int line, const char *format, va_list args)
+void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, 
+    int line, const char* function, const char *fmt, va_list args)
 {
     char temp[MAX_MSGLEN];
     char msg[MAX_MSGLEN * 2];
@@ -117,17 +121,15 @@ void LogManager::Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type,
     if (!log->IsEnabled() || level > log->GetLevel() || ! log->HasListeners())
         return;
 
-    CharArrayFromFormatV(temp, MAX_MSGLEN, format, args);
+    CharArrayFromFormatV(temp, MAX_MSGLEN, fmt, args);
 
-    static const char level_to_char[7] = "-NEWID";
-    sprintf(msg, "%s %s:%u %c[%s]: %s\n",
-        Common::Timer::GetTimeFormatted().c_str(),
-        file, line, level_to_char[(int)level],
-        log->GetShortName(), temp);
+    static const char level_to_char[7] = "ONEWID";
+    sprintf(msg, "%s %s:%u %c[%s] %s: %s\n", Common::Timer::GetTimeFormatted().c_str(), file, line, 
+        level_to_char[(int)level], log->GetShortName(), function, temp);
+    
 #ifdef ANDROID
     Host_SysMessage(msg);    
 #endif
-    printf(msg); // TODO(ShizZy): RemoveMe when I no longer need this
     log->Trigger(level, msg);
 }
 

+ 2 - 2
src/common/log_manager.h

@@ -99,8 +99,8 @@ public:
 
     static u32 GetMaxLevel() { return MAX_LOGLEVEL;    }
 
-    void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, 
-             const char *file, int line, const char *fmt, va_list args);
+    void Log(LogTypes::LOG_LEVELS level, LogTypes::LOG_TYPE type, const char* file, int line, 
+        const char* function, const char *fmt, va_list args);
 
     void SetLogLevel(LogTypes::LOG_TYPE type, LogTypes::LOG_LEVELS level)
     {