aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs')
-rw-r--r--Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs48
1 files changed, 48 insertions, 0 deletions
diff --git a/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs b/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
new file mode 100644
index 00000000..871076a4
--- /dev/null
+++ b/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Concurrent;
+
+namespace Ryujinx.Common.Logging
+{
+ public class ConsoleLogTarget : ILogTarget
+ {
+ private static readonly ConcurrentDictionary<LogLevel, ConsoleColor> _logColors;
+
+ private readonly ILogFormatter _formatter;
+
+ static ConsoleLogTarget()
+ {
+ _logColors = new ConcurrentDictionary<LogLevel, ConsoleColor> {
+ [ LogLevel.Stub ] = ConsoleColor.DarkGray,
+ [ LogLevel.Info ] = ConsoleColor.White,
+ [ LogLevel.Warning ] = ConsoleColor.Yellow,
+ [ LogLevel.Error ] = ConsoleColor.Red
+ };
+ }
+
+ public ConsoleLogTarget()
+ {
+ _formatter = new DefaultLogFormatter();
+ }
+
+ public void Log(object sender, LogEventArgs args)
+ {
+ if (_logColors.TryGetValue(args.Level, out ConsoleColor color))
+ {
+ Console.ForegroundColor = color;
+
+ Console.WriteLine(_formatter.Format(args));
+
+ Console.ResetColor();
+ }
+ else
+ {
+ Console.WriteLine(_formatter.Format(args));
+ }
+ }
+
+ public void Dispose()
+ {
+ Console.ResetColor();
+ }
+ }
+}