diff --git a/GlitchyEditor/src/EditorLogger.bf b/GlitchyEditor/src/EditorLogger.bf index c19c091..6f89395 100644 --- a/GlitchyEditor/src/EditorLogger.bf +++ b/GlitchyEditor/src/EditorLogger.bf @@ -109,18 +109,35 @@ public class EditorLogger : Logger DateTime timestamp = DateTime.Now; 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"); if (Editor.Instance?.LogWindow == null) 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}); } diff --git a/GlitchyEngine/src/Scripting/ScriptGlue.bf b/GlitchyEngine/src/Scripting/ScriptGlue.bf index 9769ad8..1dfbbe6 100644 --- a/GlitchyEngine/src/Scripting/ScriptGlue.bf +++ b/GlitchyEngine/src/Scripting/ScriptGlue.bf @@ -206,6 +206,11 @@ static class ScriptGlue static void Log_LogMessage(int32 logLevel, MonoString* message, MonoString* fileName, int lineNumber) { char8* utfMessage = Mono.mono_string_to_utf8(message); + + String escapedMessage = scope String(StringView(utfMessage)); + + escapedMessage.Replace("{", "{{"); + escapedMessage.Replace("}", "}}"); if (fileName != null) { @@ -213,13 +218,14 @@ static class ScriptGlue 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); } else { - Log.ClientLogger.Log((LogLevel)logLevel, StringView(utfMessage)); + Log.ClientLogger.Log((LogLevel)logLevel, escapedMessage); } Mono.mono_free(utfMessage);