|
|
|
@ -92,7 +92,11 @@ private: |
|
|
|
|
|
|
|
// Parse out log metadata
|
|
|
|
u32 line{}; |
|
|
|
std::string message, filename, function; |
|
|
|
std::string module; |
|
|
|
std::string message; |
|
|
|
std::string filename; |
|
|
|
std::string function; |
|
|
|
std::string thread; |
|
|
|
while (addr < end_addr) { |
|
|
|
const Field field{static_cast<Field>(Memory::Read8(addr++))}; |
|
|
|
const size_t length{Memory::Read8(addr++)}; |
|
|
|
@ -102,6 +106,8 @@ private: |
|
|
|
} |
|
|
|
|
|
|
|
switch (field) { |
|
|
|
case Field::Skip: |
|
|
|
break; |
|
|
|
case Field::Message: |
|
|
|
message = Memory::ReadCString(addr, length); |
|
|
|
break; |
|
|
|
@ -114,6 +120,12 @@ private: |
|
|
|
case Field::Function: |
|
|
|
function = Memory::ReadCString(addr, length); |
|
|
|
break; |
|
|
|
case Field::Module: |
|
|
|
module = Memory::ReadCString(addr, length); |
|
|
|
break; |
|
|
|
case Field::Thread: |
|
|
|
thread = Memory::ReadCString(addr, length); |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
addr += length; |
|
|
|
@ -128,12 +140,18 @@ private: |
|
|
|
if (!filename.empty()) { |
|
|
|
log_stream << filename << ':'; |
|
|
|
} |
|
|
|
if (!module.empty()) { |
|
|
|
log_stream << module << ':'; |
|
|
|
} |
|
|
|
if (!function.empty()) { |
|
|
|
log_stream << function << ':'; |
|
|
|
} |
|
|
|
if (line) { |
|
|
|
log_stream << std::to_string(line) << ':'; |
|
|
|
} |
|
|
|
if (!thread.empty()) { |
|
|
|
log_stream << thread << ':'; |
|
|
|
} |
|
|
|
if (log_stream.str().length() > 0 && log_stream.str().back() == ':') { |
|
|
|
log_stream << ' '; |
|
|
|
} |
|
|
|
@ -142,7 +160,7 @@ private: |
|
|
|
if (header.IsTailLog()) { |
|
|
|
switch (header.severity) { |
|
|
|
case MessageHeader::Severity::Trace: |
|
|
|
LOG_TRACE(Debug_Emulated, "{}", log_stream.str()); |
|
|
|
LOG_DEBUG(Debug_Emulated, "{}", log_stream.str()); |
|
|
|
break; |
|
|
|
case MessageHeader::Severity::Info: |
|
|
|
LOG_INFO(Debug_Emulated, "{}", log_stream.str()); |
|
|
|
|