mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	log: fixed to not print twice, enabled coloring, added OS print logging as its own type
This commit is contained in:
		
							parent
							
								
									9839f3b6cd
								
							
						
					
					
						commit
						6fc62f8c93
					
				
					 4 changed files with 42 additions and 37 deletions
				
			
		|  | @ -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] = ""; | ||||
|  |  | |||
|  | @ -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) | ||||
|  |  | |||
|  | @ -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); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -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) | ||||
|     { | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue