diff options
Diffstat (limited to 'src/Ryujinx.Common/Logging')
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(); |