LoggerModule.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using Ryujinx.Common;
  2. using Ryujinx.Common.Logging;
  3. using System;
  4. using System.IO;
  5. namespace Ryujinx.Configuration
  6. {
  7. public static class LoggerModule
  8. {
  9. public static void Initialize()
  10. {
  11. ConfigurationState.Instance.Logger.EnableDebug.Event += ReloadEnableDebug;
  12. ConfigurationState.Instance.Logger.EnableStub.Event += ReloadEnableStub;
  13. ConfigurationState.Instance.Logger.EnableInfo.Event += ReloadEnableInfo;
  14. ConfigurationState.Instance.Logger.EnableWarn.Event += ReloadEnableWarning;
  15. ConfigurationState.Instance.Logger.EnableError.Event += ReloadEnableError;
  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 ReloadEnableGuest(object sender, ReactiveEventArgs<bool> e)
  42. {
  43. Logger.SetEnable(LogLevel.Guest, e.NewValue);
  44. }
  45. private static void ReloadEnableFsAccessLog(object sender, ReactiveEventArgs<bool> e)
  46. {
  47. Logger.SetEnable(LogLevel.AccessLog, e.NewValue);
  48. }
  49. private static void ReloadFilteredClasses(object sender, ReactiveEventArgs<LogClass[]> e)
  50. {
  51. bool noFilter = e.NewValue.Length == 0;
  52. foreach (var logClass in EnumExtensions.GetValues<LogClass>())
  53. {
  54. Logger.SetEnable(logClass, noFilter);
  55. }
  56. foreach (var logClass in e.NewValue)
  57. {
  58. Logger.SetEnable(logClass, true);
  59. }
  60. }
  61. private static void ReloadFileLogger(object sender, ReactiveEventArgs<bool> e)
  62. {
  63. if (e.NewValue)
  64. {
  65. Logger.AddTarget(new AsyncLogTargetWrapper(
  66. new FileLogTarget(AppDomain.CurrentDomain.BaseDirectory, "file"),
  67. 1000,
  68. AsyncLogTargetOverflowAction.Block
  69. ));
  70. }
  71. else
  72. {
  73. Logger.RemoveTarget("file");
  74. }
  75. }
  76. }
  77. }