mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	common/logging: Create a new backed for android's logcat
logging
This commit is contained in:
		
							parent
							
								
									84844e1b24
								
							
						
					
					
						commit
						9ad6bc29b5
					
				
					 5 changed files with 55 additions and 11 deletions
				
			
		|  | @ -140,6 +140,10 @@ void ColorConsoleBackend::Write(const Entry& entry) { | |||
|     PrintColoredMessage(entry); | ||||
| } | ||||
| 
 | ||||
| void LogcatBackend::Write(const Entry& entry) { | ||||
|     PrintMessageToLogcat(entry); | ||||
| } | ||||
| 
 | ||||
| FileBackend::FileBackend(const std::string& filename) : bytes_written(0) { | ||||
|     if (FileUtil::Exists(filename + ".old.txt")) { | ||||
|         FileUtil::Delete(filename + ".old.txt"); | ||||
|  |  | |||
|  | @ -81,6 +81,21 @@ public: | |||
|     void Write(const Entry& entry) override; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Backend that writes to the Android logcat | ||||
|  */ | ||||
| class LogcatBackend : public Backend { | ||||
| public: | ||||
|     static const char* Name() { | ||||
|         return "logcat"; | ||||
|     } | ||||
| 
 | ||||
|     const char* GetName() const override { | ||||
|         return Name(); | ||||
|     } | ||||
|     void Write(const Entry& entry) override; | ||||
| }; | ||||
| 
 | ||||
| /**
 | ||||
|  * Backend that writes to a file passed into the constructor | ||||
|  */ | ||||
|  |  | |||
|  | @ -9,6 +9,4 @@ | |||
| #include <string_view> | ||||
| #include "common/logging/log.h" | ||||
| 
 | ||||
| namespace Log { | ||||
| 
 | ||||
| } // namespace Log
 | ||||
| namespace Log {} // namespace Log
 | ||||
|  |  | |||
|  | @ -34,13 +34,7 @@ std::string FormatLogMessage(const Entry& entry) { | |||
| 
 | ||||
| void PrintMessage(const Entry& entry) { | ||||
|     const auto str = FormatLogMessage(entry).append(1, '\n'); | ||||
| #ifdef ANDROID | ||||
|     // Android's log level enum are offset by '2'
 | ||||
|     const int android_log_level = static_cast<int>(entry.log_level) + 2; | ||||
|     __android_log_print(android_log_level, "CitraNative", "%s", str.c_str()); | ||||
| #else | ||||
|     fputs(str.c_str(), stderr); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void PrintColoredMessage(const Entry& entry) { | ||||
|  | @ -78,7 +72,7 @@ void PrintColoredMessage(const Entry& entry) { | |||
|     } | ||||
| 
 | ||||
|     SetConsoleTextAttribute(console_handle, color); | ||||
| #elif !defined(ANDROID) | ||||
| #else | ||||
| #define ESC "\x1b" | ||||
|     const char* color = ""; | ||||
|     switch (entry.log_level) { | ||||
|  | @ -111,9 +105,40 @@ void PrintColoredMessage(const Entry& entry) { | |||
| 
 | ||||
| #ifdef _WIN32 | ||||
|     SetConsoleTextAttribute(console_handle, original_info.wAttributes); | ||||
| #elif !defined(ANDROID) | ||||
| #else | ||||
|     fputs(ESC "[0m", stderr); | ||||
| #undef ESC | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| void PrintMessageToLogcat(const Entry& entry) { | ||||
| #ifdef ANDROID | ||||
|     const auto str = FormatLogMessage(entry); | ||||
| 
 | ||||
|     android_LogPriority android_log_priority; | ||||
|     switch (entry.log_level) { | ||||
|     case Level::Trace: | ||||
|         android_log_priority = ANDROID_LOG_VERBOSE; | ||||
|         break; | ||||
|     case Level::Debug: | ||||
|         android_log_priority = ANDROID_LOG_DEBUG; | ||||
|         break; | ||||
|     case Level::Info: | ||||
|         android_log_priority = ANDROID_LOG_INFO; | ||||
|         break; | ||||
|     case Level::Warning: | ||||
|         android_log_priority = ANDROID_LOG_WARN; | ||||
|         break; | ||||
|     case Level::Error: | ||||
|         android_log_priority = ANDROID_LOG_ERROR; | ||||
|         break; | ||||
|     case Level::Critical: | ||||
|         android_log_priority = ANDROID_LOG_FATAL; | ||||
|         break; | ||||
|     case Level::Count: | ||||
|         UNREACHABLE(); | ||||
|     } | ||||
|     __android_log_print(android_log_priority, "CitraNative", "%s", str.c_str()); | ||||
| #endif | ||||
| } | ||||
| } // namespace Log
 | ||||
|  |  | |||
|  | @ -17,4 +17,6 @@ std::string FormatLogMessage(const Entry& entry); | |||
| void PrintMessage(const Entry& entry); | ||||
| /// Prints the same message as `PrintMessage`, but colored according to the severity level.
 | ||||
| void PrintColoredMessage(const Entry& entry); | ||||
| /// Formats and prints a log entry to the android logcat.
 | ||||
| void PrintMessageToLogcat(const Entry& entry); | ||||
| } // namespace Log
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue