diff options
author | jduncanator <1518948+jduncanator@users.noreply.github.com> | 2019-01-11 11:11:46 +1100 |
---|---|---|
committer | Ac_K <Acoustik666@gmail.com> | 2019-01-11 01:11:46 +0100 |
commit | 8406ec6272392a3f7f7672d85fdde333b6c70378 (patch) | |
tree | b8d3f0a1692015c4bd56897cf7146877aa967da0 /Ryujinx.Common/Logging/Logger.cs | |
parent | 600799ba87fd59c3a6ef56e55a689a1ebdc410a6 (diff) |
Refactor Ryujinx.Common and HLE Stub Logging (#537)
* Refactor Ryujinx.Common and HLE Stub Logging
* Resolve review comments
* Rename missed loop variable
* Optimize PrintStub logging function
* Pass the call-sites Thread ID through to the logger
* Remove superfluous lock from ConsoleLog
* Process logged data objects in the logger target
Pass the data object all the way to the output logger targets, to allow them to "serialize" this in whatever appropriate format they're logging in.
* Use existing StringBuilder to build the properties string
* Add a ServiceNotImplemented Exception
Useful for printing debug information about unimplemented service calls
* Resolve Style Nits
* Resolve Merge Issues
* Fix typo and align declarations
Diffstat (limited to 'Ryujinx.Common/Logging/Logger.cs')
-rw-r--r-- | Ryujinx.Common/Logging/Logger.cs | 81 |
1 files changed, 50 insertions, 31 deletions
diff --git a/Ryujinx.Common/Logging/Logger.cs b/Ryujinx.Common/Logging/Logger.cs index 6422f113..5e58f806 100644 --- a/Ryujinx.Common/Logging/Logger.cs +++ b/Ryujinx.Common/Logging/Logger.cs @@ -1,78 +1,97 @@ using System; using System.Diagnostics; +using System.Reflection; using System.Runtime.CompilerServices; +using System.Text; +using System.Threading; namespace Ryujinx.Common.Logging { public static class Logger { - private static bool[] EnabledLevels; - private static bool[] EnabledClasses; + private static Stopwatch m_Time; - public static event EventHandler<LogEventArgs> Updated; + private static readonly bool[] m_EnabledLevels; + private static readonly bool[] m_EnabledClasses; - private static Stopwatch Time; + public static event EventHandler<LogEventArgs> Updated; static Logger() { - EnabledLevels = new bool[Enum.GetNames(typeof(LogLevel)).Length]; - EnabledClasses = new bool[Enum.GetNames(typeof(LogClass)).Length]; + m_EnabledLevels = new bool[Enum.GetNames(typeof(LogLevel)).Length]; + m_EnabledClasses = new bool[Enum.GetNames(typeof(LogClass)).Length]; - EnabledLevels[(int)LogLevel.Stub] = true; - EnabledLevels[(int)LogLevel.Info] = true; - EnabledLevels[(int)LogLevel.Warning] = true; - EnabledLevels[(int)LogLevel.Error] = true; + m_EnabledLevels[(int)LogLevel.Stub] = true; + m_EnabledLevels[(int)LogLevel.Info] = true; + m_EnabledLevels[(int)LogLevel.Warning] = true; + m_EnabledLevels[(int)LogLevel.Error] = true; - for (int Index = 0; Index < EnabledClasses.Length; Index++) + for (int index = 0; index < m_EnabledClasses.Length; index++) { - EnabledClasses[Index] = true; + m_EnabledClasses[index] = true; } - Time = new Stopwatch(); + m_Time = Stopwatch.StartNew(); + } + + public static void SetEnable(LogLevel logLevel, bool enabled) + { + m_EnabledLevels[(int)logLevel] = enabled; + } + + public static void SetEnable(LogClass logClass, bool enabled) + { + m_EnabledClasses[(int)logClass] = enabled; + } - Time.Start(); + public static void PrintDebug(LogClass logClass, string message, [CallerMemberName] string caller = "") + { + Print(LogLevel.Debug, logClass, GetFormattedMessage(logClass, message, caller)); } - public static void SetEnable(LogLevel Level, bool Enabled) + public static void PrintInfo(LogClass logClass, string message, [CallerMemberName] string Caller = "") { - EnabledLevels[(int)Level] = Enabled; + Print(LogLevel.Info, logClass, GetFormattedMessage(logClass, message, Caller)); } - public static void SetEnable(LogClass Class, bool Enabled) + public static void PrintWarning(LogClass logClass, string message, [CallerMemberName] string Caller = "") { - EnabledClasses[(int)Class] = Enabled; + Print(LogLevel.Warning, logClass, GetFormattedMessage(logClass, message, Caller)); } - public static void PrintDebug(LogClass Class, string Message, [CallerMemberName] string Caller = "") + public static void PrintError(LogClass logClass, string message, [CallerMemberName] string Caller = "") { - Print(LogLevel.Debug, Class, GetFormattedMessage(Class, Message, Caller)); + Print(LogLevel.Error, logClass, GetFormattedMessage(logClass, message, Caller)); } - public static void PrintStub(LogClass Class, string Message, [CallerMemberName] string Caller = "") + public static void PrintStub(LogClass logClass, string message = "", [CallerMemberName] string caller = "") { - Print(LogLevel.Stub, Class, GetFormattedMessage(Class, Message, Caller)); + Print(LogLevel.Stub, logClass, GetFormattedMessage(logClass, "Stubbed. " + message, caller)); } - public static void PrintInfo(LogClass Class, string Message, [CallerMemberName] string Caller = "") + public static void PrintStub<T>(LogClass logClass, T obj, [CallerMemberName] string caller = "") { - Print(LogLevel.Info, Class, GetFormattedMessage(Class, Message, Caller)); + Print(LogLevel.Stub, logClass, GetFormattedMessage(logClass, "Stubbed.", caller), obj); } - public static void PrintWarning(LogClass Class, string Message, [CallerMemberName] string Caller = "") + public static void PrintStub<T>(LogClass logClass, string message, T obj, [CallerMemberName] string caller = "") { - Print(LogLevel.Warning, Class, GetFormattedMessage(Class, Message, Caller)); + Print(LogLevel.Stub, logClass, GetFormattedMessage(logClass, "Stubbed. " + message, caller), obj); } - public static void PrintError(LogClass Class, string Message, [CallerMemberName] string Caller = "") + private static void Print(LogLevel logLevel, LogClass logClass, string message) { - Print(LogLevel.Error, Class, GetFormattedMessage(Class, Message, Caller)); + if (m_EnabledLevels[(int)logLevel] && m_EnabledClasses[(int)logClass]) + { + Updated?.Invoke(null, new LogEventArgs(logLevel, m_Time.Elapsed, Thread.CurrentThread.ManagedThreadId, message)); + } } - private static void Print(LogLevel Level, LogClass Class, string Message) + private static void Print(LogLevel logLevel, LogClass logClass, string message, object data) { - if (EnabledLevels[(int)Level] && EnabledClasses[(int)Class]) + if (m_EnabledLevels[(int)logLevel] && m_EnabledClasses[(int)logClass]) { - Updated?.Invoke(null, new LogEventArgs(Level, Time.Elapsed, Message)); + Updated?.Invoke(null, new LogEventArgs(logLevel, m_Time.Elapsed, Thread.CurrentThread.ManagedThreadId, message, data)); } } |