LoggerModule.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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.EnableGuest.Event += ReloadEnableGuest;
  16. ConfigurationState.Instance.Logger.EnableFsAccessLog.Event += ReloadEnableFsAccessLog;
  17. ConfigurationState.Instance.Logger.FilteredClasses.Event += ReloadFilteredClasses;
  18. ConfigurationState.Instance.Logger.EnableFileLog.Event += ReloadFileLogger;
  19. }
  20. private static void ReloadEnableDebug(object sender, ReactiveEventArgs<bool> e)
  21. {
  22. Logger.SetEnable(LogLevel.Debug, e.NewValue);
  23. }
  24. private static void ReloadEnableStub(object sender, ReactiveEventArgs<bool> e)
  25. {
  26. Logger.SetEnable(LogLevel.Stub, e.NewValue);
  27. }
  28. private static void ReloadEnableInfo(object sender, ReactiveEventArgs<bool> e)
  29. {
  30. Logger.SetEnable(LogLevel.Info, e.NewValue);
  31. }
  32. private static void ReloadEnableWarning(object sender, ReactiveEventArgs<bool> e)
  33. {
  34. Logger.SetEnable(LogLevel.Warning, e.NewValue);
  35. }
  36. private static void ReloadEnableError(object sender, ReactiveEventArgs<bool> e)
  37. {
  38. Logger.SetEnable(LogLevel.Error, e.NewValue);
  39. }
  40. private static void ReloadEnableGuest(object sender, ReactiveEventArgs<bool> e)
  41. {
  42. Logger.SetEnable(LogLevel.Guest, e.NewValue);
  43. }
  44. private static void ReloadEnableFsAccessLog(object sender, ReactiveEventArgs<bool> e)
  45. {
  46. Logger.SetEnable(LogLevel.AccessLog, e.NewValue);
  47. }
  48. private static void ReloadFilteredClasses(object sender, ReactiveEventArgs<LogClass[]> e)
  49. {
  50. bool noFilter = e.NewValue.Length == 0;
  51. foreach (var logClass in Enum.GetValues<LogClass>())
  52. {
  53. Logger.SetEnable(logClass, noFilter);
  54. }
  55. foreach (var logClass in e.NewValue)
  56. {
  57. Logger.SetEnable(logClass, true);
  58. }
  59. }
  60. private static void ReloadFileLogger(object sender, ReactiveEventArgs<bool> e)
  61. {
  62. if (e.NewValue)
  63. {
  64. Logger.AddTarget(new AsyncLogTargetWrapper(
  65. new FileLogTarget(AppDomain.CurrentDomain.BaseDirectory, "file"),
  66. 1000,
  67. AsyncLogTargetOverflowAction.Block
  68. ));
  69. }
  70. else
  71. {
  72. Logger.RemoveTarget("file");
  73. }
  74. }
  75. }
  76. }