Log: Also log filename and line number of caller

This commit is contained in:
Simon Lübeß
2024-01-20 21:23:34 +01:00
parent 55eef017e7
commit 02be6d8eb7
7 changed files with 160 additions and 87 deletions
+48 -35
View File
@@ -6,6 +6,7 @@ using GlitchyEngine.World;
using GlitchLog;
using GlitchyEngine.Scripting;
using GlitchyEngine.Renderer;
using GlitchyEngine;
namespace GlitchyEditor.EditWindows;
@@ -38,8 +39,7 @@ enum MessageType
class MessageSource
{
public UUID? Entity = null;
public StringView? ScriptName = null;
public int? Line = null;
public MessageOrigin MessageOrigin = null ~ delete _;
/// If true, the message is only meant for engine developers... so only me :(
public bool IsEngineMessage = false;
@@ -258,53 +258,66 @@ class LogWindow : EditorWindow
ImGui.TableNextColumn();
// Timestamp
ImGui.TextWrapped($"[{message.Timestamp:HH:mm:ss.fff}]");
if (message.Source.IsEngineMessage)
if (ImGui.BeginChild("Message", .Zero, .None, .None))
{
ImGui.SameLine();
ImGui.TextUnformatted("Engine");
}
// Timestamp
ImGui.TextWrapped($"[{message.Timestamp:HH:mm:ss.fff}]");
// Show entity
if (message.Source?.Entity != null)
{
ImGui.SameLine();
Result<Entity> entity = Editor.Instance.CurrentScene.GetEntityByID(message.Source.Entity.Value);
if (entity case .Ok(let e))
if (message.Source.IsEngineMessage)
{
ImGui.Text($"Entity: \"{e.Name}\" (ID: {message.Source.Entity})");
ImGui.SameLine();
ImGui.TextUnformatted("Engine");
}
if (ImGui.IsItemClicked())
Editor.Instance.EntityHierarchyWindow.HighlightEntity(entity);
// Show entity
if (message.Source?.Entity != null)
{
ImGui.SameLine();
Result<Entity> entity = Editor.Instance.CurrentScene.GetEntityByID(message.Source.Entity.Value);
if (entity case .Ok(let e))
{
ImGui.Text($"Entity: \"{e.Name}\" (ID: {message.Source.Entity})");
if (ImGui.IsItemClicked())
Editor.Instance.EntityHierarchyWindow.HighlightEntity(entity);
}
else
{
ImGui.Text($"Entity: (ID: {message.Source.Entity})");
}
}
if (message.Source.Exception != null)
{
if (ImGui.CollapsingHeader(message.Message.Ptr))
{
// Show the native to managed entry point only if we show engine messages
if (_showEngineMessages)
ImGui.TextUnformatted(message.Source.Exception.StackTrace);
else
ImGui.TextUnformatted(message.Source.Exception.CleanStackTrace);
ImGui.NewLine();
}
}
else
{
ImGui.Text($"Entity: (ID: {message.Source.Entity})");
ImGui.TextUnformatted(message.Message);
}
}
if (message.Source.Exception != null)
ImGui.EndChild();
if (ImGui.IsItemHovered() && ImGui.IsMouseDoubleClicked(.Left))
{
if (ImGui.CollapsingHeader(message.Message.Ptr))
if (message.Source.MessageOrigin != null)
{
// Show the native to managed entry point only if we show engine messages
if (_showEngineMessages)
ImGui.TextUnformatted(message.Source.Exception.StackTrace);
else
ImGui.TextUnformatted(message.Source.Exception.CleanStackTrace);
ImGui.NewLine();
VisualStudioUtility.OpenScript(message.Source.MessageOrigin.FileName);
}
}
else
{
ImGui.TextUnformatted(message.Message);
}
// Dont show the counter if we only have one message.
if (count > 1)
+4
View File
@@ -120,6 +120,10 @@ public class EditorLogger : Logger
{
Editor.Instance.LogWindow.LogException(timestamp, ex);
}
else if (args.Count > 0 && (var messageOrigin = args[^1] as MessageOrigin))
{
Editor.Instance.LogWindow.Log(timestamp, level, message, new .() {IsEngineMessage = IsEngineLogger, MessageOrigin = messageOrigin});
}
else
{
Editor.Instance.LogWindow.Log(timestamp, level, message, new .() {IsEngineMessage = IsEngineLogger});