diff --git a/Moonlight/App/Extensions/JSRuntimeExtensions.cs b/Moonlight/App/Extensions/JSRuntimeExtensions.cs
new file mode 100644
index 00000000..7d6f4511
--- /dev/null
+++ b/Moonlight/App/Extensions/JSRuntimeExtensions.cs
@@ -0,0 +1,30 @@
+using Microsoft.JSInterop;
+
+namespace Moonlight.App.Extensions;
+
+public static class JSRuntimeExtensions
+{
+ public static async Task InvokeVoidSafeAsync(this IJSRuntime jsRuntime, string method, params object[] args)
+ {
+ try
+ {
+ await jsRuntime.InvokeVoidAsync(method, args);
+ }
+ catch (Exception)
+ {
+ // ignored
+ }
+ }
+
+ public static void InvokeVoidSafe(this IJSRuntime jsRuntime, string method, params object[] args)
+ {
+ try
+ {
+ jsRuntime.InvokeVoidAsync(method, args);
+ }
+ catch (Exception)
+ {
+ // ignored
+ }
+ }
+}
\ No newline at end of file
diff --git a/Moonlight/App/LogMigrator/LogMigrator.cs b/Moonlight/App/LogMigrator/LogMigrator.cs
index d7644dfb..0837ff3d 100644
--- a/Moonlight/App/LogMigrator/LogMigrator.cs
+++ b/Moonlight/App/LogMigrator/LogMigrator.cs
@@ -27,19 +27,39 @@ public class LogMigrator : ILogger
switch (logLevel)
{
case LogLevel.Critical:
- Logger.Fatal($"[{Name}] {formatter(state, exception)}");
+ Logger.Fatal(formatter(state, exception));
+
+ if(exception != null)
+ Logger.Fatal(exception);
+
break;
case LogLevel.Warning:
- Logger.Warn($"[{Name}] {formatter(state, exception)}");
+ Logger.Warn(formatter(state, exception));
+
+ if(exception != null)
+ Logger.Warn(exception);
+
break;
case LogLevel.Debug:
- Logger.Debug($"[{Name}] {formatter(state, exception)}");
+ Logger.Debug(formatter(state, exception));
+
+ if(exception != null)
+ Logger.Debug(exception);
+
break;
case LogLevel.Error:
- Logger.Error($"[{Name}] {formatter(state, exception)}");
+ Logger.Error(formatter(state, exception));
+
+ if(exception != null)
+ Logger.Error(exception);
+
break;
case LogLevel.Information:
- Logger.Info($"[{Name}] {formatter(state, exception)}");
+ Logger.Info(formatter(state, exception));
+
+ if(exception != null)
+ Logger.Info(exception);
+
break;
}
}
diff --git a/Moonlight/App/LogMigrator/SentryDiagnosticsLogger.cs b/Moonlight/App/LogMigrator/SentryDiagnosticsLogger.cs
new file mode 100644
index 00000000..a042a88b
--- /dev/null
+++ b/Moonlight/App/LogMigrator/SentryDiagnosticsLogger.cs
@@ -0,0 +1,71 @@
+using Moonlight.App.Helpers;
+using Sentry;
+using Sentry.Extensibility;
+
+namespace Moonlight.App.LogMigrator;
+
+public class SentryDiagnosticsLogger : IDiagnosticLogger
+{
+ private readonly SentryLevel Level;
+
+ public SentryDiagnosticsLogger(SentryLevel level)
+ {
+ Level = level;
+ }
+
+ public bool IsEnabled(SentryLevel level)
+ {
+ if ((int)level >= (int)Level)
+ {
+ return true;
+ }
+
+ return false;
+ }
+
+ public void Log(SentryLevel logLevel, string message, Exception? exception = null, params object?[] args)
+ {
+ switch (logLevel)
+ {
+ case SentryLevel.Debug:
+ Logger.Debug(string.Format(message, args));
+
+ if(exception != null)
+ Logger.Debug(exception);
+
+ break;
+
+ case SentryLevel.Info:
+ Logger.Info(string.Format(message, args));
+
+ if(exception != null)
+ Logger.Info(exception);
+
+ break;
+
+ case SentryLevel.Warning:
+ Logger.Warn(string.Format(message, args));
+
+ if(exception != null)
+ Logger.Warn(exception);
+
+ break;
+
+ case SentryLevel.Error:
+ Logger.Error(string.Format(message, args));
+
+ if(exception != null)
+ Logger.Error(exception);
+
+ break;
+
+ case SentryLevel.Fatal:
+ Logger.Fatal(string.Format(message, args));
+
+ if(exception != null)
+ Logger.Fatal(exception);
+
+ break;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Moonlight/App/Services/Files/StorageService.cs b/Moonlight/App/Services/Files/StorageService.cs
index e1b32aad..9d05c692 100644
--- a/Moonlight/App/Services/Files/StorageService.cs
+++ b/Moonlight/App/Services/Files/StorageService.cs
@@ -15,6 +15,7 @@ public class StorageService
Directory.CreateDirectory(PathBuilder.Dir("storage", "configs"));
Directory.CreateDirectory(PathBuilder.Dir("storage", "resources"));
Directory.CreateDirectory(PathBuilder.Dir("storage", "backups"));
+ Directory.CreateDirectory(PathBuilder.Dir("storage", "logs"));
if(IsEmpty(PathBuilder.Dir("storage", "resources")))
{
diff --git a/Moonlight/Moonlight.csproj b/Moonlight/Moonlight.csproj
index dec7a172..3a697212 100644
--- a/Moonlight/Moonlight.csproj
+++ b/Moonlight/Moonlight.csproj
@@ -49,6 +49,7 @@