LoggerModule.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. using Ryujinx.Common;
  2. using Ryujinx.Common.Logging;
  3. using System;
  4. namespace Ryujinx.Configuration
  5. {
  6. public static class LoggerModule
  7. {
  8. public static void Initialize()
  9. {
  10. ConfigurationState.Instance.Logger.EnableDebug.Event += ReloadEnableDebug;
  11. ConfigurationState.Instance.Logger.EnableStub.Event += ReloadEnableStub;
  12. ConfigurationState.Instance.Logger.EnableInfo.Event += ReloadEnableInfo;
  13. ConfigurationState.Instance.Logger.EnableWarn.Event += ReloadEnableWarning;
  14. ConfigurationState.Instance.Logger.EnableError.Event += ReloadEnableError;
  15. ConfigurationState.Instance.Logger.EnableTrace.Event += ReloadEnableTrace;
  16. ConfigurationState.Instance.Logger.EnableGuest.Event += ReloadEnableGuest;
  17. ConfigurationState.Instance.Logger.EnableFsAccessLog.Event += ReloadEnableFsAccessLog;
  18. ConfigurationState.Instance.Logger.FilteredClasses.Event += ReloadFilteredClasses;
  19. ConfigurationState.Instance.Logger.EnableFileLog.Event += ReloadFileLogger;
  20. }
  21. private static void ReloadEnableDebug(object sender, ReactiveEventArgs<bool> e)
  22. {
  23. Logger.SetEnable(LogLevel.Debug, e.NewValue);
  24. }
  25. private static void ReloadEnableStub(object sender, ReactiveEventArgs<bool> e)
  26. {
  27. Logger.SetEnable(LogLevel.Stub, e.NewValue);
  28. }
  29. private static void ReloadEnableInfo(object sender, ReactiveEventArgs<bool> e)
  30. {
  31. Logger.SetEnable(LogLevel.Info, e.NewValue);
  32. }
  33. private static void ReloadEnableWarning(object sender, ReactiveEventArgs<bool> e)
  34. {
  35. Logger.SetEnable(LogLevel.Warning, e.NewValue);
  36. }
  37. private static void ReloadEnableError(object sender, ReactiveEventArgs<bool> e)
  38. {
  39. Logger.SetEnable(LogLevel.Error, e.NewValue);
  40. }
  41. private static void ReloadEnableTrace(object sender, ReactiveEventArgs<bool> e)
  42. {
  43. Logger.SetEnable(LogLevel.Trace, e.NewValue);
  44. }
  45. private static void ReloadEnableGuest(object sender, ReactiveEventArgs<bool> e)
  46. {
  47. Logger.SetEnable(LogLevel.Guest, e.NewValue);
  48. }
  49. private static void ReloadEnableFsAccessLog(object sender, ReactiveEventArgs<bool> e)
  50. {
  51. Logger.SetEnable(LogLevel.AccessLog, e.NewValue);
  52. }
  53. private static void ReloadFilteredClasses(object sender, ReactiveEventArgs<LogClass[]> e)
  54. {
  55. bool noFilter = e.NewValue.Length == 0;
  56. foreach (var logClass in Enum.GetValues<LogClass>())
  57. {
  58. Logger.SetEnable(logClass, noFilter);
  59. }
  60. foreach (var logClass in e.NewValue)
  61. {
  62. Logger.SetEnable(logClass, true);
  63. }
  64. }
  65. private static void ReloadFileLogger(object sender, ReactiveEventArgs<bool> e)
  66. {
  67. if (e.NewValue)
  68. {
  69. Logger.AddTarget(new AsyncLogTargetWrapper(
  70. new FileLogTarget(ReleaseInformations.GetBaseApplicationDirectory(), "file"),
  71. 1000,
  72. AsyncLogTargetOverflowAction.Block
  73. ));
  74. }
  75. else
  76. {
  77. Logger.RemoveTarget("file");
  78. }
  79. }
  80. }
  81. }