Fixed crash in Logger

This commit is contained in:
Simon Lübeß
2024-02-19 21:38:35 +01:00
parent f5f32eecb2
commit 1ca9746921
2 changed files with 29 additions and 6 deletions
+21 -4
View File
@@ -109,18 +109,35 @@ public class EditorLogger : Logger
DateTime timestamp = DateTime.Now; DateTime timestamp = DateTime.Now;
String message = scope String(4096); String message = scope String(4096);
message.AppendF(format, params args);
MonoExceptionHelper exceptionHelper = null;
MessageOrigin messageOrigin = null;
if (args.Count > 0)
{
exceptionHelper = args[^1] as MonoExceptionHelper;
messageOrigin = args[^1] as MessageOrigin;
}
var argsForMessage = args[0...];
if (exceptionHelper != null || messageOrigin != null)
{
argsForMessage = args[0..<^1];
}
message.AppendF(format, params argsForMessage);
Debug.Write($"[{timestamp:HH:mm:ss.fff}] ({_name})|{level.UpperString}: {message}\n"); Debug.Write($"[{timestamp:HH:mm:ss.fff}] ({_name})|{level.UpperString}: {message}\n");
if (Editor.Instance?.LogWindow == null) if (Editor.Instance?.LogWindow == null)
return; return;
if (args.Count > 0 && (var ex = args[^1] as MonoExceptionHelper)) if (args.Count > 0 && exceptionHelper != null)
{ {
Editor.Instance.LogWindow.LogException(timestamp, ex); Editor.Instance.LogWindow.LogException(timestamp, exceptionHelper);
} }
else if (args.Count > 0 && (var messageOrigin = args[^1] as MessageOrigin)) else if (args.Count > 0 && messageOrigin != null)
{ {
Editor.Instance.LogWindow.Log(timestamp, level, message, new .() {IsEngineMessage = IsEngineLogger, MessageOrigin = messageOrigin}); Editor.Instance.LogWindow.Log(timestamp, level, message, new .() {IsEngineMessage = IsEngineLogger, MessageOrigin = messageOrigin});
} }
+8 -2
View File
@@ -206,6 +206,11 @@ static class ScriptGlue
static void Log_LogMessage(int32 logLevel, MonoString* message, MonoString* fileName, int lineNumber) static void Log_LogMessage(int32 logLevel, MonoString* message, MonoString* fileName, int lineNumber)
{ {
char8* utfMessage = Mono.mono_string_to_utf8(message); char8* utfMessage = Mono.mono_string_to_utf8(message);
String escapedMessage = scope String(StringView(utfMessage));
escapedMessage.Replace("{", "{{");
escapedMessage.Replace("}", "}}");
if (fileName != null) if (fileName != null)
{ {
@@ -213,13 +218,14 @@ static class ScriptGlue
MessageOrigin messageOrigin = new MessageOrigin(StringView(utfFileName), lineNumber); MessageOrigin messageOrigin = new MessageOrigin(StringView(utfFileName), lineNumber);
Log.ClientLogger.Log((LogLevel)logLevel, StringView(utfMessage), messageOrigin);
Log.ClientLogger.Log((LogLevel)logLevel, escapedMessage, messageOrigin);
Mono.mono_free(utfFileName); Mono.mono_free(utfFileName);
} }
else else
{ {
Log.ClientLogger.Log((LogLevel)logLevel, StringView(utfMessage)); Log.ClientLogger.Log((LogLevel)logLevel, escapedMessage);
} }
Mono.mono_free(utfMessage); Mono.mono_free(utfMessage);