ConsoleLogTarget.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using System.Collections.Concurrent;
  3. namespace Ryujinx.Common.Logging
  4. {
  5. public class ConsoleLogTarget : ILogTarget
  6. {
  7. private readonly ILogFormatter _formatter;
  8. private readonly string _name;
  9. string ILogTarget.Name { get => _name; }
  10. private static ConsoleColor GetLogColor(LogLevel level) => level switch {
  11. LogLevel.Info => ConsoleColor.White,
  12. LogLevel.Warning => ConsoleColor.Yellow,
  13. LogLevel.Error => ConsoleColor.Red,
  14. LogLevel.Stub => ConsoleColor.DarkGray,
  15. LogLevel.Notice => ConsoleColor.Cyan,
  16. LogLevel.Trace => ConsoleColor.DarkCyan,
  17. _ => ConsoleColor.Gray,
  18. };
  19. public ConsoleLogTarget(string name)
  20. {
  21. _formatter = new DefaultLogFormatter();
  22. _name = name;
  23. }
  24. public void Log(object sender, LogEventArgs args)
  25. {
  26. Console.ForegroundColor = GetLogColor(args.Level);
  27. Console.WriteLine(_formatter.Format(args));
  28. Console.ResetColor();
  29. }
  30. public void Dispose()
  31. {
  32. Console.ResetColor();
  33. }
  34. }
  35. }