diff options
author | jduncanator <1518948+jduncanator@users.noreply.github.com> | 2019-02-11 23:00:32 +1100 |
---|---|---|
committer | gdkchan <gab.dark.100@gmail.com> | 2019-02-11 09:00:32 -0300 |
commit | d306115750df9df170cfef4d49c6b0b7af498962 (patch) | |
tree | 13e51d71ad264c8815106dc6a3190af02d193777 /Ryujinx.Common/Logging/Logger.cs | |
parent | a694420d11ef74e4f0bf473be2b6f64635bc89c7 (diff) |
Logger and Configuration Refactoring (#573)
* Logging: Refactor log targets into Ryujinx.Common
* Logger: Implement JSON Log Target
* Logger: Optimize Console/File logging targets
Implement a simple ObjectPool to pool up StringBuilders to avoid causing excessive GCing of gen1/2 items when large amounts of log entries are being generated.
We can also pre-determine the async overflow action at initialization time, allowing for an easy optimization in the message enqueue function, avoiding a number of comparisons.
* Logger: Implement LogFormatters
* Config: Refactor configuration file and loading
* Config: Rename to .jsonc to avoid highlighting issues in VSC and GitHub
* Resolve style nits
* Config: Resolve incorrect default key binding
* Config: Also update key binding default in schema
* Tidy up namespace imports
* Config: Update CONFIG.md to reflect new Config file
Diffstat (limited to 'Ryujinx.Common/Logging/Logger.cs')
-rw-r--r-- | Ryujinx.Common/Logging/Logger.cs | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/Ryujinx.Common/Logging/Logger.cs b/Ryujinx.Common/Logging/Logger.cs index 35ca416b..88ebe473 100644 --- a/Ryujinx.Common/Logging/Logger.cs +++ b/Ryujinx.Common/Logging/Logger.cs @@ -1,8 +1,7 @@ using System; +using System.Collections.Generic; using System.Diagnostics; -using System.Reflection; using System.Runtime.CompilerServices; -using System.Text; using System.Threading; namespace Ryujinx.Common.Logging @@ -14,9 +13,9 @@ namespace Ryujinx.Common.Logging private static readonly bool[] m_EnabledLevels; private static readonly bool[] m_EnabledClasses; - public static event EventHandler<LogEventArgs> Updated; + private static readonly List<ILogTarget> m_LogTargets; - public static bool EnableFileLog { get; set; } + public static event EventHandler<LogEventArgs> Updated; static Logger() { @@ -33,9 +32,30 @@ namespace Ryujinx.Common.Logging m_EnabledClasses[index] = true; } + m_LogTargets = new List<ILogTarget>(); + m_Time = Stopwatch.StartNew(); } + public static void AddTarget(ILogTarget target) + { + m_LogTargets.Add(target); + + Updated += target.Log; + } + + public static void Shutdown() + { + Updated = null; + + foreach(var target in m_LogTargets) + { + target.Dispose(); + } + + m_LogTargets.Clear(); + } + public static void SetEnable(LogLevel logLevel, bool enabled) { m_EnabledLevels[(int)logLevel] = enabled; |