ConsoleLogTarget.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. using System;
  2. using System.Collections.Concurrent;
  3. namespace Ryujinx.Common.Logging
  4. {
  5. public class ConsoleLogTarget : ILogTarget
  6. {
  7. private static readonly ConcurrentDictionary<LogLevel, ConsoleColor> _logColors;
  8. private readonly ILogFormatter _formatter;
  9. private readonly string _name;
  10. string ILogTarget.Name { get => _name; }
  11. static ConsoleLogTarget()
  12. {
  13. _logColors = new ConcurrentDictionary<LogLevel, ConsoleColor> {
  14. [ LogLevel.Stub ] = ConsoleColor.DarkGray,
  15. [ LogLevel.Info ] = ConsoleColor.White,
  16. [ LogLevel.Warning ] = ConsoleColor.Yellow,
  17. [ LogLevel.Error ] = ConsoleColor.Red
  18. };
  19. }
  20. public ConsoleLogTarget(string name)
  21. {
  22. _formatter = new DefaultLogFormatter();
  23. _name = name;
  24. }
  25. public void Log(object sender, LogEventArgs args)
  26. {
  27. if (_logColors.TryGetValue(args.Level, out ConsoleColor color))
  28. {
  29. Console.ForegroundColor = color;
  30. Console.WriteLine(_formatter.Format(args));
  31. Console.ResetColor();
  32. }
  33. else
  34. {
  35. Console.WriteLine(_formatter.Format(args));
  36. }
  37. }
  38. public void Dispose()
  39. {
  40. Console.ResetColor();
  41. }
  42. }
  43. }