diff options
author | mageven <62494521+mageven@users.noreply.github.com> | 2020-08-04 05:02:53 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-04 01:32:53 +0200 |
commit | a33dc2f4919f7fdc8ea9db41c4c70c38cedfd3df (patch) | |
tree | d3eee67f25c3a302fa23dc39670438e7ebbfd35c /Ryujinx/Program.cs | |
parent | 60db4c353099e8656a330ede03fdbe57a421fa47 (diff) |
Improved Logger (#1292)
* Logger class changes only
Now compile-time checking is possible with the help of Nullable Value
types.
* Misc formatting
* Manual optimizations
PrintGuestLog
PrintGuestStackTrace
Surfaceflinger DequeueBuffer
* Reduce SendVibrationXX log level to Debug
* Add Notice log level
This level is always enabled and used to print system info, etc...
Also, rewrite LogColor to switch expression as colors are static
* Unify unhandled exception event handlers
* Print enabled LogLevels during init
* Re-add App Exit disposes in proper order
nit: switch case spacing
* Revert PrintGuestStackTrace to Info logs due to #1407
PrintGuestStackTrace is now called in some critical error handlers
so revert to old behavior as KThread isn't part of Guest.
* Batch replace Logger statements
Diffstat (limited to 'Ryujinx/Program.cs')
-rw-r--r-- | Ryujinx/Program.cs | 46 |
1 files changed, 32 insertions, 14 deletions
diff --git a/Ryujinx/Program.cs b/Ryujinx/Program.cs index cb8ab48e..0b55d6f8 100644 --- a/Ryujinx/Program.cs +++ b/Ryujinx/Program.cs @@ -33,7 +33,10 @@ namespace Ryujinx string systemPath = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine); Environment.SetEnvironmentVariable("Path", $"{Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin")};{systemPath}"); - GLib.ExceptionManager.UnhandledException += Glib_UnhandledException; + // Hook unhandled exception and process exit events + GLib.ExceptionManager.UnhandledException += (GLib.UnhandledExceptionArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating); + AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => ProcessUnhandledException(e.ExceptionObject as Exception, e.IsTerminating); + AppDomain.CurrentDomain.ProcessExit += (object sender, EventArgs e) => ProgramExit(); // Initialize the configuration ConfigurationState.Initialize(); @@ -77,11 +80,7 @@ namespace Ryujinx ConfigurationState.Instance.ToFileFormat().SaveConfig(globalConfigurationPath); } - Logger.PrintInfo(LogClass.Application, $"Ryujinx Version: {Version}"); - - Logger.PrintInfo(LogClass.Application, $"Operating System: {SystemInfo.Instance.OsDescription}"); - Logger.PrintInfo(LogClass.Application, $"CPU: {SystemInfo.Instance.CpuName}"); - Logger.PrintInfo(LogClass.Application, $"Total RAM: {SystemInfo.Instance.RamSizeInMB}"); + PrintSystemInfo(); Profile.Initialize(); @@ -105,22 +104,41 @@ namespace Ryujinx Application.Run(); } - private static void Glib_UnhandledException(GLib.UnhandledExceptionArgs e) + private static void PrintSystemInfo() { - Exception exception = e.ExceptionObject as Exception; + Logger.Notice.Print(LogClass.Application, $"Ryujinx Version: {Version}"); + + Logger.Notice.Print(LogClass.Application, $"Operating System: {SystemInfo.Instance.OsDescription}"); + Logger.Notice.Print(LogClass.Application, $"CPU: {SystemInfo.Instance.CpuName}"); + Logger.Notice.Print(LogClass.Application, $"Total RAM: {SystemInfo.Instance.RamSizeInMB}"); - Logger.PrintError(LogClass.Application, $"Unhandled exception caught: {exception}"); + var enabledLogs = Logger.GetEnabledLevels(); + Logger.Notice.Print(LogClass.Application, $"Logs Enabled: {(enabledLogs.Count == 0 ? "<None>" : string.Join(", ", enabledLogs))}"); + } + private static void ProcessUnhandledException(Exception e, bool isTerminating) + { Ptc.Close(); PtcProfiler.Stop(); - if (e.IsTerminating) - { - Logger.Shutdown(); + string message = $"Unhandled exception caught: {e}"; + + Logger.Error?.PrintMsg(LogClass.Application, message); - Ptc.Dispose(); - PtcProfiler.Dispose(); + if (Logger.Error == null) Logger.Notice.PrintMsg(LogClass.Application, message); + + if (isTerminating) + { + ProgramExit(); } } + + private static void ProgramExit() + { + Ptc.Dispose(); + PtcProfiler.Dispose(); + + Logger.Shutdown(); + } } } |