aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Common/Logging
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Common/Logging')
-rw-r--r--src/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs8
-rw-r--r--src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs10
-rw-r--r--src/Ryujinx.Common/Logging/Formatters/ILogFormatter.cs2
-rw-r--r--src/Ryujinx.Common/Logging/LogClass.cs4
-rw-r--r--src/Ryujinx.Common/Logging/LogEventArgs.cs12
-rw-r--r--src/Ryujinx.Common/Logging/LogEventArgsJson.cs12
-rw-r--r--src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs2
-rw-r--r--src/Ryujinx.Common/Logging/Logger.cs102
-rw-r--r--src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs27
-rw-r--r--src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs20
-rw-r--r--src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs11
-rw-r--r--src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs12
12 files changed, 116 insertions, 106 deletions
diff --git a/src/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs b/src/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
index 3769b03a..ed2a8144 100644
--- a/src/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
+++ b/src/Ryujinx.Common/Logging/Formatters/DefaultLogFormatter.cs
@@ -5,11 +5,11 @@ namespace Ryujinx.Common.Logging.Formatters
{
internal class DefaultLogFormatter : ILogFormatter
{
- private static readonly ObjectPool<StringBuilder> StringBuilderPool = SharedPools.Default<StringBuilder>();
+ private static readonly ObjectPool<StringBuilder> _stringBuilderPool = SharedPools.Default<StringBuilder>();
public string Format(LogEventArgs args)
{
- StringBuilder sb = StringBuilderPool.Allocate();
+ StringBuilder sb = _stringBuilderPool.Allocate();
try
{
@@ -44,8 +44,8 @@ namespace Ryujinx.Common.Logging.Formatters
}
finally
{
- StringBuilderPool.Release(sb);
+ _stringBuilderPool.Release(sb);
}
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs b/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs
index 6e3b0043..1ee73acd 100644
--- a/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs
+++ b/src/Ryujinx.Common/Logging/Formatters/DynamicObjectFormatter.cs
@@ -7,7 +7,7 @@ namespace Ryujinx.Common.Logging.Formatters
{
internal static class DynamicObjectFormatter
{
- private static readonly ObjectPool<StringBuilder> StringBuilderPool = SharedPools.Default<StringBuilder>();
+ private static readonly ObjectPool<StringBuilder> _stringBuilderPool = SharedPools.Default<StringBuilder>();
public static string? Format(object? dynamicObject)
{
@@ -16,7 +16,7 @@ namespace Ryujinx.Common.Logging.Formatters
return null;
}
- StringBuilder sb = StringBuilderPool.Allocate();
+ StringBuilder sb = _stringBuilderPool.Allocate();
try
{
@@ -26,7 +26,7 @@ namespace Ryujinx.Common.Logging.Formatters
}
finally
{
- StringBuilderPool.Release(sb);
+ _stringBuilderPool.Release(sb);
}
}
@@ -48,7 +48,7 @@ namespace Ryujinx.Common.Logging.Formatters
if (typeof(Array).IsAssignableFrom(prop.PropertyType))
{
- Array? array = (Array?) prop.GetValue(dynamicObject);
+ Array? array = (Array?)prop.GetValue(dynamicObject);
if (array is not null)
{
@@ -81,4 +81,4 @@ namespace Ryujinx.Common.Logging.Formatters
sb.Append('}');
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Formatters/ILogFormatter.cs b/src/Ryujinx.Common/Logging/Formatters/ILogFormatter.cs
index 25a06d83..5c660a52 100644
--- a/src/Ryujinx.Common/Logging/Formatters/ILogFormatter.cs
+++ b/src/Ryujinx.Common/Logging/Formatters/ILogFormatter.cs
@@ -4,4 +4,4 @@
{
string Format(LogEventArgs args);
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/LogClass.cs b/src/Ryujinx.Common/Logging/LogClass.cs
index e62676cd..f277dd06 100644
--- a/src/Ryujinx.Common/Logging/LogClass.cs
+++ b/src/Ryujinx.Common/Logging/LogClass.cs
@@ -71,6 +71,6 @@ namespace Ryujinx.Common.Logging
SurfaceFlinger,
TamperMachine,
Ui,
- Vic
+ Vic,
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/LogEventArgs.cs b/src/Ryujinx.Common/Logging/LogEventArgs.cs
index a27af780..264f8f3a 100644
--- a/src/Ryujinx.Common/Logging/LogEventArgs.cs
+++ b/src/Ryujinx.Common/Logging/LogEventArgs.cs
@@ -6,18 +6,18 @@ namespace Ryujinx.Common.Logging
{
public readonly LogLevel Level;
public readonly TimeSpan Time;
- public readonly string ThreadName;
+ public readonly string ThreadName;
public readonly string Message;
public readonly object Data;
public LogEventArgs(LogLevel level, TimeSpan time, string threadName, string message, object data = null)
{
- Level = level;
- Time = time;
+ Level = level;
+ Time = time;
ThreadName = threadName;
- Message = message;
- Data = data;
+ Message = message;
+ Data = data;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/LogEventArgsJson.cs b/src/Ryujinx.Common/Logging/LogEventArgsJson.cs
index 5203b17a..9628a757 100644
--- a/src/Ryujinx.Common/Logging/LogEventArgsJson.cs
+++ b/src/Ryujinx.Common/Logging/LogEventArgsJson.cs
@@ -8,7 +8,7 @@ namespace Ryujinx.Common.Logging
{
public LogLevel Level { get; }
public TimeSpan Time { get; }
- public string ThreadName { get; }
+ public string ThreadName { get; }
public string Message { get; }
public string Data { get; }
@@ -16,11 +16,11 @@ namespace Ryujinx.Common.Logging
[JsonConstructor]
public LogEventArgsJson(LogLevel level, TimeSpan time, string threadName, string message, string data = null)
{
- Level = level;
- Time = time;
+ Level = level;
+ Time = time;
ThreadName = threadName;
- Message = message;
- Data = data;
+ Message = message;
+ Data = data;
}
public static LogEventArgsJson FromLogEventArgs(LogEventArgs args)
@@ -28,4 +28,4 @@ namespace Ryujinx.Common.Logging
return new LogEventArgsJson(args.Level, args.Time, args.ThreadName, args.Message, DynamicObjectFormatter.Format(args.Data));
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs b/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs
index da21f11e..c5dd6114 100644
--- a/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs
+++ b/src/Ryujinx.Common/Logging/LogEventJsonSerializerContext.cs
@@ -6,4 +6,4 @@ namespace Ryujinx.Common.Logging
internal partial class LogEventJsonSerializerContext : JsonSerializerContext
{
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Logger.cs b/src/Ryujinx.Common/Logging/Logger.cs
index 25f9c5ee..f03a7fd8 100644
--- a/src/Ryujinx.Common/Logging/Logger.cs
+++ b/src/Ryujinx.Common/Logging/Logger.cs
@@ -10,11 +10,11 @@ namespace Ryujinx.Common.Logging
{
public static class Logger
{
- private static readonly Stopwatch m_Time;
+ private static readonly Stopwatch _time;
- private static readonly bool[] m_EnabledClasses;
+ private static readonly bool[] _enabledClasses;
- private static readonly List<ILogTarget> m_LogTargets;
+ private static readonly List<ILogTarget> _logTargets;
private static readonly StdErrAdapter _stdErrAdapter;
@@ -32,27 +32,27 @@ namespace Ryujinx.Common.Logging
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintMsg(LogClass logClass, string message)
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, "", message)));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, "", message)));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Print(LogClass logClass, string message, [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message)));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message)));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Print(LogClass logClass, string message, object data, [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message), data));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message), data));
}
}
@@ -60,71 +60,71 @@ namespace Ryujinx.Common.Logging
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintStack(LogClass logClass, string message, [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message), new StackTrace(true)));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, message), new StackTrace(true)));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintStub(LogClass logClass, string message = "", [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed. " + message)));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed. " + message)));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintStub(LogClass logClass, object data, [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed."), data));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed."), data));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintStub(LogClass logClass, string message, object data, [CallerMemberName] string caller = "")
{
- if (m_EnabledClasses[(int)logClass])
+ if (_enabledClasses[(int)logClass])
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed. " + message), data));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, FormatMessage(logClass, caller, "Stubbed. " + message), data));
}
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PrintRawMsg(string message)
{
- Updated?.Invoke(null, new LogEventArgs(Level, m_Time.Elapsed, Thread.CurrentThread.Name, message));
+ Updated?.Invoke(null, new LogEventArgs(Level, _time.Elapsed, Thread.CurrentThread.Name, message));
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static string FormatMessage(LogClass Class, string Caller, string Message) => $"{Class} {Caller}: {Message}";
+ private static string FormatMessage(LogClass logClass, string caller, string message) => $"{logClass} {caller}: {message}";
}
- public static Log? Debug { get; private set; }
- public static Log? Info { get; private set; }
- public static Log? Warning { get; private set; }
- public static Log? Error { get; private set; }
- public static Log? Guest { get; private set; }
+ public static Log? Debug { get; private set; }
+ public static Log? Info { get; private set; }
+ public static Log? Warning { get; private set; }
+ public static Log? Error { get; private set; }
+ public static Log? Guest { get; private set; }
public static Log? AccessLog { get; private set; }
- public static Log? Stub { get; private set; }
- public static Log? Trace { get; private set; }
- public static Log Notice { get; } // Always enabled
+ public static Log? Stub { get; private set; }
+ public static Log? Trace { get; private set; }
+ public static Log Notice { get; } // Always enabled
static Logger()
{
- m_EnabledClasses = new bool[Enum.GetNames<LogClass>().Length];
+ _enabledClasses = new bool[Enum.GetNames<LogClass>().Length];
- for (int index = 0; index < m_EnabledClasses.Length; index++)
+ for (int index = 0; index < _enabledClasses.Length; index++)
{
- m_EnabledClasses[index] = true;
+ _enabledClasses[index] = true;
}
- m_LogTargets = new List<ILogTarget>();
+ _logTargets = new List<ILogTarget>();
- m_Time = Stopwatch.StartNew();
+ _time = Stopwatch.StartNew();
// Logger should log to console by default
AddTarget(new AsyncLogTargetWrapper(
@@ -145,12 +145,12 @@ namespace Ryujinx.Common.Logging
public static void RestartTime()
{
- m_Time.Restart();
+ _time.Restart();
}
private static ILogTarget GetTarget(string targetName)
{
- foreach (var target in m_LogTargets)
+ foreach (var target in _logTargets)
{
if (target.Name.Equals(targetName))
{
@@ -163,7 +163,7 @@ namespace Ryujinx.Common.Logging
public static void AddTarget(ILogTarget target)
{
- m_LogTargets.Add(target);
+ _logTargets.Add(target);
Updated += target.Log;
}
@@ -176,7 +176,7 @@ namespace Ryujinx.Common.Logging
{
Updated -= logTarget.Log;
- m_LogTargets.Remove(logTarget);
+ _logTargets.Remove(logTarget);
logTarget.Dispose();
}
@@ -188,18 +188,18 @@ namespace Ryujinx.Common.Logging
_stdErrAdapter.Dispose();
- foreach (var target in m_LogTargets)
+ foreach (var target in _logTargets)
{
target.Dispose();
}
- m_LogTargets.Clear();
+ _logTargets.Clear();
}
public static IReadOnlyCollection<LogLevel> GetEnabledLevels()
{
- var logs = new Log?[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace };
- List<LogLevel> levels = new List<LogLevel>(logs.Length);
+ var logs = new[] { Debug, Info, Warning, Error, Guest, AccessLog, Stub, Trace };
+ List<LogLevel> levels = new(logs.Length);
foreach (var log in logs)
{
if (log.HasValue)
@@ -215,21 +215,23 @@ namespace Ryujinx.Common.Logging
{
switch (logLevel)
{
- case LogLevel.Debug : Debug = enabled ? new Log(LogLevel.Debug) : new Log?(); break;
- case LogLevel.Info : Info = enabled ? new Log(LogLevel.Info) : new Log?(); break;
- case LogLevel.Warning : Warning = enabled ? new Log(LogLevel.Warning) : new Log?(); break;
- case LogLevel.Error : Error = enabled ? new Log(LogLevel.Error) : new Log?(); break;
- case LogLevel.Guest : Guest = enabled ? new Log(LogLevel.Guest) : new Log?(); break;
- case LogLevel.AccessLog : AccessLog = enabled ? new Log(LogLevel.AccessLog): new Log?(); break;
- case LogLevel.Stub : Stub = enabled ? new Log(LogLevel.Stub) : new Log?(); break;
- case LogLevel.Trace : Trace = enabled ? new Log(LogLevel.Trace) : new Log?(); break;
+#pragma warning disable IDE0055 // Disable formatting
+ case LogLevel.Debug : Debug = enabled ? new Log(LogLevel.Debug) : new Log?(); break;
+ case LogLevel.Info : Info = enabled ? new Log(LogLevel.Info) : new Log?(); break;
+ case LogLevel.Warning : Warning = enabled ? new Log(LogLevel.Warning) : new Log?(); break;
+ case LogLevel.Error : Error = enabled ? new Log(LogLevel.Error) : new Log?(); break;
+ case LogLevel.Guest : Guest = enabled ? new Log(LogLevel.Guest) : new Log?(); break;
+ case LogLevel.AccessLog : AccessLog = enabled ? new Log(LogLevel.AccessLog) : new Log?(); break;
+ case LogLevel.Stub : Stub = enabled ? new Log(LogLevel.Stub) : new Log?(); break;
+ case LogLevel.Trace : Trace = enabled ? new Log(LogLevel.Trace) : new Log?(); break;
default: throw new ArgumentException("Unknown Log Level");
+#pragma warning restore IDE0055
}
}
public static void SetEnable(LogClass logClass, bool enabled)
{
- m_EnabledClasses[(int)logClass] = enabled;
+ _enabledClasses[(int)logClass] = enabled;
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
index ddc547ac..226318b0 100644
--- a/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
+++ b/src/Ryujinx.Common/Logging/Targets/AsyncLogTargetWrapper.cs
@@ -14,16 +14,16 @@ namespace Ryujinx.Common.Logging.Targets
/// <summary>
/// Discard the overflowing item
/// </summary>
- Discard = 1
+ Discard = 1,
}
public class AsyncLogTargetWrapper : ILogTarget
{
- private ILogTarget _target;
+ private readonly ILogTarget _target;
- private Thread _messageThread;
+ private readonly Thread _messageThread;
- private BlockingCollection<LogEventArgs> _messageQueue;
+ private readonly BlockingCollection<LogEventArgs> _messageQueue;
private readonly int _overflowTimeout;
@@ -35,11 +35,12 @@ namespace Ryujinx.Common.Logging.Targets
public AsyncLogTargetWrapper(ILogTarget target, int queueLimit, AsyncLogTargetOverflowAction overflowAction)
{
- _target = target;
- _messageQueue = new BlockingCollection<LogEventArgs>(queueLimit);
+ _target = target;
+ _messageQueue = new BlockingCollection<LogEventArgs>(queueLimit);
_overflowTimeout = overflowAction == AsyncLogTargetOverflowAction.Block ? -1 : 0;
- _messageThread = new Thread(() => {
+ _messageThread = new Thread(() =>
+ {
while (!_messageQueue.IsCompleted)
{
try
@@ -55,10 +56,11 @@ namespace Ryujinx.Common.Logging.Targets
// on the next iteration.
}
}
- });
-
- _messageThread.Name = "Logger.MessageThread";
- _messageThread.IsBackground = true;
+ })
+ {
+ Name = "Logger.MessageThread",
+ IsBackground = true,
+ };
_messageThread.Start();
}
@@ -72,8 +74,9 @@ namespace Ryujinx.Common.Logging.Targets
public void Dispose()
{
+ GC.SuppressFinalize(this);
_messageQueue.CompleteAdding();
_messageThread.Join();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
index b5986461..16735834 100644
--- a/src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
+++ b/src/Ryujinx.Common/Logging/Targets/ConsoleLogTarget.cs
@@ -11,20 +11,21 @@ namespace Ryujinx.Common.Logging.Targets
string ILogTarget.Name { get => _name; }
- private static ConsoleColor GetLogColor(LogLevel level) => level switch {
- LogLevel.Info => ConsoleColor.White,
+ private static ConsoleColor GetLogColor(LogLevel level) => level switch
+ {
+ LogLevel.Info => ConsoleColor.White,
LogLevel.Warning => ConsoleColor.Yellow,
- LogLevel.Error => ConsoleColor.Red,
- LogLevel.Stub => ConsoleColor.DarkGray,
- LogLevel.Notice => ConsoleColor.Cyan,
- LogLevel.Trace => ConsoleColor.DarkCyan,
- _ => ConsoleColor.Gray,
+ LogLevel.Error => ConsoleColor.Red,
+ LogLevel.Stub => ConsoleColor.DarkGray,
+ LogLevel.Notice => ConsoleColor.Cyan,
+ LogLevel.Trace => ConsoleColor.DarkCyan,
+ _ => ConsoleColor.Gray,
};
public ConsoleLogTarget(string name)
{
_formatter = new DefaultLogFormatter();
- _name = name;
+ _name = name;
}
public void Log(object sender, LogEventArgs args)
@@ -36,7 +37,8 @@ namespace Ryujinx.Common.Logging.Targets
public void Dispose()
{
+ GC.SuppressFinalize(this);
Console.ResetColor();
}
}
-} \ No newline at end of file
+}
diff --git a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
index 2cc4a823..8d1a94e5 100644
--- a/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
+++ b/src/Ryujinx.Common/Logging/Targets/FileLogTarget.cs
@@ -7,9 +7,9 @@ namespace Ryujinx.Common.Logging.Targets
{
public class FileLogTarget : ILogTarget
{
- private readonly StreamWriter _logWriter;
+ private readonly StreamWriter _logWriter;
private readonly ILogFormatter _formatter;
- private readonly string _name;
+ private readonly string _name;
string ILogTarget.Name { get => _name; }
@@ -20,7 +20,7 @@ namespace Ryujinx.Common.Logging.Targets
public FileLogTarget(string path, string name, FileShare fileShare, FileMode fileMode)
{
// Ensure directory is present
- DirectoryInfo logDir = new DirectoryInfo(Path.Combine(path, "Logs"));
+ DirectoryInfo logDir = new(Path.Combine(path, "Logs"));
logDir.Create();
// Clean up old logs, should only keep 3
@@ -33,9 +33,9 @@ namespace Ryujinx.Common.Logging.Targets
string version = ReleaseInformation.GetVersion();
// Get path for the current time
- path = Path.Combine(logDir.FullName, $"Ryujinx_{version}_{DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss")}.log");
+ path = Path.Combine(logDir.FullName, $"Ryujinx_{version}_{DateTime.Now:yyyy-MM-dd_HH-mm-ss}.log");
- _name = name;
+ _name = name;
_logWriter = new StreamWriter(File.Open(path, fileMode, FileAccess.Write, fileShare));
_formatter = new DefaultLogFormatter();
}
@@ -48,6 +48,7 @@ namespace Ryujinx.Common.Logging.Targets
public void Dispose()
{
+ GC.SuppressFinalize(this);
_logWriter.WriteLine("---- End of Log ----");
_logWriter.Flush();
_logWriter.Dispose();
diff --git a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
index ae264e59..1873dc60 100644
--- a/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
+++ b/src/Ryujinx.Common/Logging/Targets/JsonLogTarget.cs
@@ -1,25 +1,26 @@
using Ryujinx.Common.Utilities;
+using System;
using System.IO;
namespace Ryujinx.Common.Logging.Targets
{
public class JsonLogTarget : ILogTarget
{
- private Stream _stream;
- private bool _leaveOpen;
- private string _name;
+ private readonly Stream _stream;
+ private readonly bool _leaveOpen;
+ private readonly string _name;
string ILogTarget.Name { get => _name; }
public JsonLogTarget(Stream stream, string name)
{
_stream = stream;
- _name = name;
+ _name = name;
}
public JsonLogTarget(Stream stream, bool leaveOpen)
{
- _stream = stream;
+ _stream = stream;
_leaveOpen = leaveOpen;
}
@@ -31,6 +32,7 @@ namespace Ryujinx.Common.Logging.Targets
public void Dispose()
{
+ GC.SuppressFinalize(this);
if (!_leaveOpen)
{
_stream.Dispose();