aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Common/Logging
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Common/Logging')
-rw-r--r--Ryujinx.Common/Logging/Logger.cs33
-rw-r--r--Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs2
-rw-r--r--Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs7
-rw-r--r--Ryujinx.Common/Logging/Targets/FileLogTarget.cs13
-rw-r--r--Ryujinx.Common/Logging/Targets/ILogTarget.cs2
-rw-r--r--Ryujinx.Common/Logging/Targets/JsonLogTarget.cs9
6 files changed, 59 insertions, 7 deletions
diff --git a/Ryujinx.Common/Logging/Logger.cs b/Ryujinx.Common/Logging/Logger.cs
index 10b1d970..83af97b1 100644
--- a/Ryujinx.Common/Logging/Logger.cs
+++ b/Ryujinx.Common/Logging/Logger.cs
@@ -37,6 +37,12 @@ namespace Ryujinx.Common.Logging
m_LogTargets = new List<ILogTarget>();
m_Time = Stopwatch.StartNew();
+
+ // Logger should log to console by default
+ AddTarget(new AsyncLogTargetWrapper(
+ new ConsoleLogTarget("console"),
+ 1000,
+ AsyncLogTargetOverflowAction.Block));
}
public static void RestartTime()
@@ -44,6 +50,19 @@ namespace Ryujinx.Common.Logging
m_Time.Restart();
}
+ private static ILogTarget GetTarget(string targetName)
+ {
+ foreach (var target in m_LogTargets)
+ {
+ if (target.Name.Equals(targetName))
+ {
+ return target;
+ }
+ }
+
+ return null;
+ }
+
public static void AddTarget(ILogTarget target)
{
m_LogTargets.Add(target);
@@ -51,6 +70,20 @@ namespace Ryujinx.Common.Logging
Updated += target.Log;
}
+ public static void RemoveTarget(string target)
+ {
+ ILogTarget logTarget = GetTarget(target);
+
+ if (logTarget != null)
+ {
+ Updated -= logTarget.Log;
+
+ m_LogTargets.Remove(logTarget);
+
+ logTarget.Dispose();
+ }
+ }
+
public static void Shutdown()
{
Updated = null;
diff --git a/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs b/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
index a805a83b..c946b678 100644
--- a/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
+++ b/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
@@ -27,6 +27,8 @@ namespace Ryujinx.Common.Logging
private readonly int _overflowTimeout;
+ string ILogTarget.Name { get => _target.Name; }
+
public AsyncLogTargetWrapper(ILogTarget target)
: this(target, -1, AsyncLogTargetOverflowAction.Block)
{ }
diff --git a/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs b/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
index 871076a4..ff5c6f5a 100644
--- a/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
+++ b/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
@@ -9,6 +9,10 @@ namespace Ryujinx.Common.Logging
private readonly ILogFormatter _formatter;
+ private readonly string _name;
+
+ string ILogTarget.Name { get => _name; }
+
static ConsoleLogTarget()
{
_logColors = new ConcurrentDictionary<LogLevel, ConsoleColor> {
@@ -19,9 +23,10 @@ namespace Ryujinx.Common.Logging
};
}
- public ConsoleLogTarget()
+ public ConsoleLogTarget(string name)
{
_formatter = new DefaultLogFormatter();
+ _name = name;
}
public void Log(object sender, LogEventArgs args)
diff --git a/Ryujinx.Common/Logging/Targets/FileLogTarget.cs b/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
index 85dc8249..4db5f7bc 100644
--- a/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
+++ b/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
@@ -1,4 +1,5 @@
-using System.IO;
+using System;
+using System.IO;
using System.Text;
namespace Ryujinx.Common.Logging
@@ -9,13 +10,17 @@ namespace Ryujinx.Common.Logging
private readonly StreamWriter _logWriter;
private readonly ILogFormatter _formatter;
+ private readonly string _name;
- public FileLogTarget(string path)
- : this(path, FileShare.Read, FileMode.Append)
+ string ILogTarget.Name { get => _name; }
+
+ public FileLogTarget(string path, string name)
+ : this(path, name, FileShare.Read, FileMode.Append)
{ }
- public FileLogTarget(string path, FileShare fileShare, FileMode fileMode)
+ public FileLogTarget(string path, string name, FileShare fileShare, FileMode fileMode)
{
+ _name = name;
_logWriter = new StreamWriter(File.Open(path, fileMode, FileAccess.Write, fileShare));
_formatter = new DefaultLogFormatter();
}
diff --git a/Ryujinx.Common/Logging/Targets/ILogTarget.cs b/Ryujinx.Common/Logging/Targets/ILogTarget.cs
index 261c5e64..d4d26a93 100644
--- a/Ryujinx.Common/Logging/Targets/ILogTarget.cs
+++ b/Ryujinx.Common/Logging/Targets/ILogTarget.cs
@@ -5,5 +5,7 @@ namespace Ryujinx.Common.Logging
public interface ILogTarget : IDisposable
{
void Log(object sender, LogEventArgs args);
+
+ string Name { get; }
}
}
diff --git a/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs b/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
index 410394aa..3729b18d 100644
--- a/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
+++ b/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
@@ -1,4 +1,5 @@
-using System.IO;
+using System;
+using System.IO;
using Utf8Json;
namespace Ryujinx.Common.Logging
@@ -7,10 +8,14 @@ namespace Ryujinx.Common.Logging
{
private Stream _stream;
private bool _leaveOpen;
+ private string _name;
- public JsonLogTarget(Stream stream)
+ string ILogTarget.Name { get => _name; }
+
+ public JsonLogTarget(Stream stream, string name)
{
_stream = stream;
+ _name = name;
}
public JsonLogTarget(Stream stream, bool leaveOpen)