From 2b30edc2e502a0103b8cd6cbd3dbce7f8530644a Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 20 Nov 2025 10:53:58 +0200 Subject: [PATCH 01/16] Build for prod will log Warn level and above --- .../Services/LoggerService/LoggerService.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 83fbfc9..de76d4a 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -77,8 +77,13 @@ private bool InitializeLog4Net() layout.ActivateOptions(); consoleAppender.Layout = layout; - Level consoleThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; - consoleAppender.Threshold = consoleThreshold; + bool isDev = Application.isEditor || Debug.isDebugBuild; + if (!isDev) + { + Level consoleThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; + consoleAppender.Threshold = consoleThreshold; + } + consoleAppender.ActivateOptions(); hierarchy.Root.AddAppender(consoleAppender); From c8fe8b45b1d0a337c9eb9bf0ee7c79b5ffc296ad Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 20 Nov 2025 11:03:14 +0200 Subject: [PATCH 02/16] change all appenders --- .../Services/LoggerService/LoggerService.cs | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index de76d4a..c8823d0 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -70,20 +70,26 @@ private bool InitializeLog4Net() Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + bool isDev = Application.isEditor || Debug.isDebugBuild; + Level prodThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; + if (!isDev) + { + foreach (var appender in hierarchy.GetAppenders()) + { + if (appender is log4net.Appender.AppenderSkeleton sk) + { + sk.Threshold = prodThreshold; + sk.ActivateOptions(); + } + } + } ConsoleAppender consoleAppender = new ConsoleAppender(_originalUnityLogHandler); PatternLayout layout = new PatternLayout(); layout.ConversionPattern = Pattern; layout.ActivateOptions(); consoleAppender.Layout = layout; - - bool isDev = Application.isEditor || Debug.isDebugBuild; - if (!isDev) - { - Level consoleThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; - consoleAppender.Threshold = consoleThreshold; - } - + consoleAppender.Threshold = isDev ? Level.All : prodThreshold; consoleAppender.ActivateOptions(); hierarchy.Root.AddAppender(consoleAppender); From b2f7ccf2c93e59631380a68309ef5a86ddc256d9 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 20 Nov 2025 11:04:29 +0200 Subject: [PATCH 03/16] change to Level.Debug --- .../Services/LoggerService/LoggerService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index c8823d0..f1cca65 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -89,7 +89,8 @@ private bool InitializeLog4Net() layout.ConversionPattern = Pattern; layout.ActivateOptions(); consoleAppender.Layout = layout; - consoleAppender.Threshold = isDev ? Level.All : prodThreshold; + + consoleAppender.Threshold = isDev ? Level.Debug : prodThreshold; consoleAppender.ActivateOptions(); hierarchy.Root.AddAppender(consoleAppender); From fe786f0fa0b6a67ff6bf449fa4b7c069279c4c37 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 20 Nov 2025 11:04:54 +0200 Subject: [PATCH 04/16] format file --- .../Services/LoggerService/LoggerService.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index f1cca65..9b965dd 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -72,6 +72,7 @@ private bool InitializeLog4Net() bool isDev = Application.isEditor || Debug.isDebugBuild; Level prodThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; + if (!isDev) { foreach (var appender in hierarchy.GetAppenders()) @@ -83,13 +84,14 @@ private bool InitializeLog4Net() } } } + ConsoleAppender consoleAppender = new ConsoleAppender(_originalUnityLogHandler); PatternLayout layout = new PatternLayout(); layout.ConversionPattern = Pattern; layout.ActivateOptions(); consoleAppender.Layout = layout; - + consoleAppender.Threshold = isDev ? Level.Debug : prodThreshold; consoleAppender.ActivateOptions(); From 14b3f71cd663671c0a13ff068ef4d1d59a59d27d Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 20 Nov 2025 12:30:00 +0200 Subject: [PATCH 05/16] add force min log level --- Assets/StreamingAssets/Logger/LoggerConfig.json | 1 + .../com.mapcolonies.core/Services/LoggerService/Config.cs | 1 + .../Services/LoggerService/LoggerService.cs | 1 + .../Services/LoggerService/LoggerServiceConfig.cs | 7 +++++++ 4 files changed, 10 insertions(+) diff --git a/Assets/StreamingAssets/Logger/LoggerConfig.json b/Assets/StreamingAssets/Logger/LoggerConfig.json index 207eeeb..535182f 100644 --- a/Assets/StreamingAssets/Logger/LoggerConfig.json +++ b/Assets/StreamingAssets/Logger/LoggerConfig.json @@ -3,6 +3,7 @@ "ConsoleEnabled": true, "Log4NetConfigXml": "Logger/log4net.xml", "MinLogLevel": "DEBUG", + "ForceMinLogLevel": "false", "StackTraceRowLimit": 0, "HttpEndpointUrl": "https://TODO/logs", "HttpPersistenceDirectory": "C:/Yahalom/logs/offline" diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs b/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs index d277cc1..2364c4b 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs @@ -8,6 +8,7 @@ public class Config public bool Enabled; public bool ConsoleEnabled; public string MinLogLevel; + public bool ForceMinLogLevel; public string HttpEndpointUrl; public string HttpPersistenceDirectory; } diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 9b965dd..327c8b8 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -70,6 +70,7 @@ private bool InitializeLog4Net() Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + //TODO:Get _config.ForceMinLogLevel and override bool isDev = Application.isEditor || Debug.isDebugBuild; Level prodThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index e423f93..b341849 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -33,6 +33,12 @@ public string MinLogLevel private set; } + public bool ForceMinLogLevel + { + get; + private set; + } + public string HttpEndpointUrl { get; @@ -70,6 +76,7 @@ public void Init() ServiceEnabled = _config.Enabled; EnableConsole = _config.ConsoleEnabled; MinLogLevel = _config.MinLogLevel; + ForceMinLogLevel = _config.ForceMinLogLevel; HttpEndpointUrl = _config.HttpEndpointUrl; HttpPersistenceDirectory = _config.HttpPersistenceDirectory; } From dd111e9786e4244d622534fb38a897f2007caea1 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 27 Nov 2025 09:12:10 +0200 Subject: [PATCH 06/16] add min log level for console, http and file --- .../Logger/LoggerServiceConfigTests.cs | 2 +- .../StreamingAssets/Logger/LoggerConfig.json | 4 ++- .../Services/LoggerService/Config.cs | 2 ++ .../Services/LoggerService/LoggerService.cs | 25 ++++++++++++++++--- .../LoggerService/LoggerServiceConfig.cs | 18 +++++++++++-- 5 files changed, 43 insertions(+), 8 deletions(-) diff --git a/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs b/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs index 70da1b1..0e5f6fb 100644 --- a/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs +++ b/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs @@ -13,7 +13,7 @@ public void Init_WhenJsonExists_LoadsBasicProperties() Assert.IsTrue(config.ServiceEnabled); Assert.IsTrue(config.EnableConsole); Assert.AreEqual("Logger/log4net.xml", config.Log4NetConfigXml); - Assert.AreEqual("DEBUG", config.MinLogLevel); + Assert.AreEqual("DEBUG", config.MinConsoleLogLevel); } } } diff --git a/Assets/StreamingAssets/Logger/LoggerConfig.json b/Assets/StreamingAssets/Logger/LoggerConfig.json index 535182f..c8ef057 100644 --- a/Assets/StreamingAssets/Logger/LoggerConfig.json +++ b/Assets/StreamingAssets/Logger/LoggerConfig.json @@ -2,7 +2,9 @@ "Enabled": true, "ConsoleEnabled": true, "Log4NetConfigXml": "Logger/log4net.xml", - "MinLogLevel": "DEBUG", + "MinConsoleLogLevel": "DEBUG", + "MinFileLogLevel": "DEBUG", + "MinHttpLogLevel": "DEBUG", "ForceMinLogLevel": "false", "StackTraceRowLimit": 0, "HttpEndpointUrl": "https://TODO/logs", diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs b/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs index 2364c4b..5931b3e 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs @@ -8,6 +8,8 @@ public class Config public bool Enabled; public bool ConsoleEnabled; public string MinLogLevel; + public string MinFileLogLevel; + public string MinHttpLogLevel; public bool ForceMinLogLevel; public string HttpEndpointUrl; public string HttpPersistenceDirectory; diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 327c8b8..3ffb817 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -72,18 +72,35 @@ private bool InitializeLog4Net() //TODO:Get _config.ForceMinLogLevel and override bool isDev = Application.isEditor || Debug.isDebugBuild; - Level prodThreshold = hierarchy.LevelMap[_config.MinLogLevel] ?? Level.Debug; - if (!isDev) { foreach (var appender in hierarchy.GetAppenders()) { if (appender is log4net.Appender.AppenderSkeleton sk) { - sk.Threshold = prodThreshold; + if (appender.Name.Contains("Console", StringComparison.OrdinalIgnoreCase)) + { + sk.Threshold = hierarchy.LevelMap[_config.MinConsoleLogLevel] ?? Level.Debug; + } + else if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || + appender is log4net.Appender.RollingFileAppender) + { + sk.Threshold = hierarchy.LevelMap[_config.MinFileLogLevel] ?? Level.Debug; + } + else if (appender.Name.Contains("Http", StringComparison.OrdinalIgnoreCase) || + appender is HttpAppender) + { + sk.Threshold = hierarchy.LevelMap[_config.MinHttpLogLevel] ?? Level.Debug; + } + else + { + sk.Threshold = Level.Debug; + } + sk.ActivateOptions(); } } + } ConsoleAppender consoleAppender = new ConsoleAppender(_originalUnityLogHandler); @@ -93,7 +110,7 @@ private bool InitializeLog4Net() layout.ActivateOptions(); consoleAppender.Layout = layout; - consoleAppender.Threshold = isDev ? Level.Debug : prodThreshold; + consoleAppender.Threshold = hierarchy.LevelMap[_config.MinConsoleLogLevel] ?? Level.Debug; consoleAppender.ActivateOptions(); hierarchy.Root.AddAppender(consoleAppender); diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index b341849..ebef246 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -27,7 +27,19 @@ public bool EnableConsole private set; } - public string MinLogLevel + public string MinConsoleLogLevel + { + get; + private set; + } + + public string MinFileLogLevel + { + get; + private set; + } + + public string MinHttpLogLevel { get; private set; @@ -75,7 +87,9 @@ public void Init() Log4NetConfigXml = _config.Log4NetConfigXml; ServiceEnabled = _config.Enabled; EnableConsole = _config.ConsoleEnabled; - MinLogLevel = _config.MinLogLevel; + MinConsoleLogLevel = _config.MinLogLevel; + MinFileLogLevel = _config.MinFileLogLevel; + MinHttpLogLevel = _config.MinHttpLogLevel; ForceMinLogLevel = _config.ForceMinLogLevel; HttpEndpointUrl = _config.HttpEndpointUrl; HttpPersistenceDirectory = _config.HttpPersistenceDirectory; From bbaef0cf8c131228d9e70fde9afcbed91cbb280e Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Thu, 27 Nov 2025 09:15:32 +0200 Subject: [PATCH 07/16] format file --- .../Services/LoggerService/LoggerService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 3ffb817..446bcab 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -72,6 +72,7 @@ private bool InitializeLog4Net() //TODO:Get _config.ForceMinLogLevel and override bool isDev = Application.isEditor || Debug.isDebugBuild; + if (!isDev) { foreach (var appender in hierarchy.GetAppenders()) @@ -100,7 +101,6 @@ private bool InitializeLog4Net() sk.ActivateOptions(); } } - } ConsoleAppender consoleAppender = new ConsoleAppender(_originalUnityLogHandler); From 49653636e16da4eb9ab8c2f25ec940f8b8d89fc8 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:40:50 +0200 Subject: [PATCH 08/16] add settings --- .../Logger/LoggerServiceConfigTests.cs | 8 +- .../Logger/LoggerServiceIntegrationTests.cs | 4 +- .../DataManagement/app_settings.json | 8 +- .../StreamingAssets/Logger/LoggerConfig.json | 4 +- .../Services/LoggerService/Config.cs | 17 ----- .../LoggerService/LoggerInitializer.cs | 2 +- .../Services/LoggerService/LoggerService.cs | 50 ++++++++++--- .../LoggerService/LoggerServiceConfig.cs | 73 +------------------ .../Services/LoggerService/LoggerSettings.cs | 68 +++++++++++++++++ ...{Config.cs.meta => LoggerSettings.cs.meta} | 0 .../AppSettings/AppSettingsSelectors.cs | 2 + .../AppSettings/AppSettingsState.cs | 7 ++ .../EntryPoint/AppStartUpController.cs | 12 ++- .../EntryPoint/MainAppLifetimeScope.cs | 3 + 14 files changed, 152 insertions(+), 106 deletions(-) delete mode 100644 Assets/com.mapcolonies.core/Services/LoggerService/Config.cs create mode 100644 Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs rename Assets/com.mapcolonies.core/Services/LoggerService/{Config.cs.meta => LoggerSettings.cs.meta} (100%) diff --git a/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs b/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs index 0e5f6fb..d069964 100644 --- a/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs +++ b/Assets/EditorTests/Logger/LoggerServiceConfigTests.cs @@ -10,10 +10,10 @@ public void Init_WhenJsonExists_LoadsBasicProperties() { LoggerServiceConfig config = new LoggerServiceConfig(); config.Init(); - Assert.IsTrue(config.ServiceEnabled); - Assert.IsTrue(config.EnableConsole); - Assert.AreEqual("Logger/log4net.xml", config.Log4NetConfigXml); - Assert.AreEqual("DEBUG", config.MinConsoleLogLevel); + Assert.IsTrue(config.Settings.ServiceEnabled); + Assert.IsTrue(config.Settings.ConsoleEnabled); + Assert.AreEqual("Logger/log4net.xml", config.Settings.Log4NetConfigXml); + Assert.AreEqual("DEBUG", config.Settings.MinConsoleLogLevel); } } } diff --git a/Assets/EditorTests/Logger/LoggerServiceIntegrationTests.cs b/Assets/EditorTests/Logger/LoggerServiceIntegrationTests.cs index 4ac8c8c..4f9ebe6 100644 --- a/Assets/EditorTests/Logger/LoggerServiceIntegrationTests.cs +++ b/Assets/EditorTests/Logger/LoggerServiceIntegrationTests.cs @@ -13,8 +13,8 @@ public void DebugLog_WritesToInfoLogFile() LoggerServiceConfig config = new LoggerServiceConfig(); config.Init(); - Assert.IsTrue(config.ServiceEnabled, "ServiceEnabled must be true for this integration test."); - Assert.IsFalse(string.IsNullOrEmpty(config.Log4NetConfigXml), "Log4NetConfigXml must point to a valid XML file."); + Assert.IsTrue(config.Settings.ServiceEnabled, "ServiceEnabled must be true for this integration test."); + Assert.IsFalse(string.IsNullOrEmpty(config.Settings.Log4NetConfigXml), "Log4NetConfigXml must point to a valid XML file."); string logsDir = config.GetSystemLogsDirectory(); Directory.CreateDirectory(logsDir); diff --git a/Assets/StreamingAssets/DataManagement/app_settings.json b/Assets/StreamingAssets/DataManagement/app_settings.json index 3a04d75..7999cad 100644 --- a/Assets/StreamingAssets/DataManagement/app_settings.json +++ b/Assets/StreamingAssets/DataManagement/app_settings.json @@ -2,5 +2,11 @@ "userSettingsFile": "DataManagement/UserSettings/user_settings.json", "offlineConfigurationFile": "DataManagement/offline_config.json", "workspacesDirectory": "DataManagement/workspaces", - "remoteConfigurationUrl": "https://example.com/config/getConfig?v=10" + "remoteConfigurationUrl": "https://example.com/config/getConfig?v=10", + "loggerSettings": { + "serviceEnabled": true, + "minFileLogLevel": "ERROR", + "minHttpLogLevel": "ERROR", + "forceMinLogLevel": false + } } diff --git a/Assets/StreamingAssets/Logger/LoggerConfig.json b/Assets/StreamingAssets/Logger/LoggerConfig.json index c8ef057..aaed958 100644 --- a/Assets/StreamingAssets/Logger/LoggerConfig.json +++ b/Assets/StreamingAssets/Logger/LoggerConfig.json @@ -1,11 +1,11 @@ { - "Enabled": true, + "ServiceEnabled": true, "ConsoleEnabled": true, "Log4NetConfigXml": "Logger/log4net.xml", "MinConsoleLogLevel": "DEBUG", "MinFileLogLevel": "DEBUG", "MinHttpLogLevel": "DEBUG", - "ForceMinLogLevel": "false", + "ForceMinLogLevel": false, "StackTraceRowLimit": 0, "HttpEndpointUrl": "https://TODO/logs", "HttpPersistenceDirectory": "C:/Yahalom/logs/offline" diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs b/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs deleted file mode 100644 index 5931b3e..0000000 --- a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace com.mapcolonies.core.Services.LoggerService -{ - [System.Serializable] - public class Config - { - public string Log4NetConfigXml; - public int StackTraceRowLimit; - public bool Enabled; - public bool ConsoleEnabled; - public string MinLogLevel; - public string MinFileLogLevel; - public string MinHttpLogLevel; - public bool ForceMinLogLevel; - public string HttpEndpointUrl; - public string HttpPersistenceDirectory; - } -} diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs index d3b4f34..e9da7d8 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs @@ -7,7 +7,7 @@ namespace com.mapcolonies.core.Services.LoggerService public static class LoggerInitializer { private const string AdditionalRevisionSeparator = "f"; - private static LoggerService Logger; + public static LoggerService Logger; [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] public static void Init() diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 446bcab..745c11f 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -1,11 +1,13 @@ using System; using System.IO; using com.mapcolonies.core.Services.LoggerService.CustomAppenders; +using Cysharp.Threading.Tasks; using log4net; using log4net.Config; using log4net.Core; using log4net.Layout; using log4net.Repository.Hierarchy; +using UnityEditor.PackageManager; using UnityEngine; using Debug = UnityEngine.Debug; @@ -26,7 +28,7 @@ public LoggerService(LoggerServiceConfig config) { _config = config; - if (!config.ServiceEnabled) return; + if (!config.Settings.ServiceEnabled) return; bool success = InitializeLog4Net(); @@ -47,7 +49,7 @@ private bool InitializeLog4Net() try { _originalUnityLogHandler = Debug.unityLogger.logHandler; - string logConfigFilePath = Path.Combine(Application.streamingAssetsPath, _config.Log4NetConfigXml); + string logConfigFilePath = Path.Combine(Application.streamingAssetsPath, _config.Settings.Log4NetConfigXml); if (!File.Exists(logConfigFilePath)) { @@ -62,7 +64,7 @@ private bool InitializeLog4Net() } GlobalContext.Properties[LogFilePath] = logDirectory; - GlobalContext.Properties[HttpEndpointUrl] = _config.HttpEndpointUrl; + GlobalContext.Properties[HttpEndpointUrl] = _config.Settings.HttpEndpointUrl; GlobalContext.Properties[HttpPersistenceDirectory] = _config.GetHttpPersistenceDirectory(); FileInfo logConfigFile = new FileInfo(logConfigFilePath); @@ -81,17 +83,17 @@ private bool InitializeLog4Net() { if (appender.Name.Contains("Console", StringComparison.OrdinalIgnoreCase)) { - sk.Threshold = hierarchy.LevelMap[_config.MinConsoleLogLevel] ?? Level.Debug; + sk.Threshold = hierarchy.LevelMap[_config.Settings.MinConsoleLogLevel] ?? Level.Debug; } else if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || appender is log4net.Appender.RollingFileAppender) { - sk.Threshold = hierarchy.LevelMap[_config.MinFileLogLevel] ?? Level.Debug; + sk.Threshold = hierarchy.LevelMap[_config.Settings.MinFileLogLevel] ?? Level.Debug; } else if (appender.Name.Contains("Http", StringComparison.OrdinalIgnoreCase) || appender is HttpAppender) { - sk.Threshold = hierarchy.LevelMap[_config.MinHttpLogLevel] ?? Level.Debug; + sk.Threshold = hierarchy.LevelMap[_config.Settings.MinHttpLogLevel] ?? Level.Debug; } else { @@ -110,12 +112,12 @@ private bool InitializeLog4Net() layout.ActivateOptions(); consoleAppender.Layout = layout; - consoleAppender.Threshold = hierarchy.LevelMap[_config.MinConsoleLogLevel] ?? Level.Debug; + consoleAppender.Threshold = hierarchy.LevelMap[_config.Settings.MinConsoleLogLevel] ?? Level.Debug; consoleAppender.ActivateOptions(); hierarchy.Root.AddAppender(consoleAppender); - if (!_config.EnableConsole) + if (!_config.Settings.ConsoleEnabled) { hierarchy.Root.RemoveAppender(consoleAppender); } @@ -160,7 +162,7 @@ private bool TryInitializeLogDirectory(out string logDirectory) success = false; } - string logConfigFilePath = Path.Combine(Application.streamingAssetsPath, _config.Log4NetConfigXml); + string logConfigFilePath = Path.Combine(Application.streamingAssetsPath, _config.Settings.Log4NetConfigXml); if (!success || !File.Exists(logConfigFilePath)) { @@ -192,5 +194,35 @@ public void Dispose() _originalUnityLogHandler = null; } } + + public UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) + { + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + bool isDev = Application.isEditor || Debug.isDebugBuild; + + if (!isDev) + { + foreach (var appender in hierarchy.GetAppenders()) + { + if (appender is log4net.Appender.AppenderSkeleton sk) + { + if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || + appender is log4net.Appender.RollingFileAppender) + { + sk.Threshold = hierarchy.LevelMap[loggerSettings.MinFileLogLevel] ?? Level.Debug; + } + else if (appender.Name.Contains("Http", StringComparison.OrdinalIgnoreCase) || + appender is HttpAppender) + { + sk.Threshold = hierarchy.LevelMap[loggerSettings.MinHttpLogLevel] ?? Level.Debug; + } + + sk.ActivateOptions(); + } + } + } + + return UniTask.CompletedTask; + } } } diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index ebef246..5c596d2 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -1,4 +1,5 @@ using System.IO; +using Newtonsoft.Json; using UnityEngine; namespace com.mapcolonies.core.Services.LoggerService @@ -7,61 +8,7 @@ public class LoggerServiceConfig { private const string JsonFileName = "Logger/LoggerConfig.json"; - private Config _config; - - public string Log4NetConfigXml - { - get; - private set; - } - - public bool ServiceEnabled - { - get; - private set; - } - - public bool EnableConsole - { - get; - private set; - } - - public string MinConsoleLogLevel - { - get; - private set; - } - - public string MinFileLogLevel - { - get; - private set; - } - - public string MinHttpLogLevel - { - get; - private set; - } - - public bool ForceMinLogLevel - { - get; - private set; - } - - public string HttpEndpointUrl - { - get; - private set; - } - - public string HttpPersistenceDirectory - { - get; - private set; - } + public LoggerSettings Settings { get; private set; } public void Init() { @@ -76,23 +23,11 @@ public void Init() try { string jsonContent = File.ReadAllText(filePath); - _config = JsonUtility.FromJson(jsonContent); - - if (_config == null) + Settings = JsonConvert.DeserializeObject(jsonContent); + if (Settings == null) { Debug.LogError($"Failed to deserialize {JsonFileName} JSON content."); - return; } - - Log4NetConfigXml = _config.Log4NetConfigXml; - ServiceEnabled = _config.Enabled; - EnableConsole = _config.ConsoleEnabled; - MinConsoleLogLevel = _config.MinLogLevel; - MinFileLogLevel = _config.MinFileLogLevel; - MinHttpLogLevel = _config.MinHttpLogLevel; - ForceMinLogLevel = _config.ForceMinLogLevel; - HttpEndpointUrl = _config.HttpEndpointUrl; - HttpPersistenceDirectory = _config.HttpPersistenceDirectory; } catch (System.Exception ex) { diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs new file mode 100644 index 0000000..cf54a5f --- /dev/null +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs @@ -0,0 +1,68 @@ +using System; + +namespace com.mapcolonies.core.Services.LoggerService +{ + [Serializable] + public record LoggerSettings + { + public string Log4NetConfigXml + { + get; + set; + } + + public int StackTraceRowLimit + { + get; + set; + } + + public bool ServiceEnabled + { + get; + set; + } + + public bool ConsoleEnabled + { + get; + set; + } + + public string MinConsoleLogLevel + { + get; + set; + } + + public string MinFileLogLevel + { + get; + set; + } + + public string MinHttpLogLevel + { + get; + set; + } + + public bool ForceMinLogLevel + { + get; + set; + } + + public string HttpEndpointUrl + { + get; + set; + } + + public string HttpPersistenceDirectory + { + get; + set; + } + } +} diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/Config.cs.meta b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs.meta similarity index 100% rename from Assets/com.mapcolonies.core/Services/LoggerService/Config.cs.meta rename to Assets/com.mapcolonies.core/Services/LoggerService/LoggerSettings.cs.meta diff --git a/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsSelectors.cs b/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsSelectors.cs index 951f2fe..31a85b3 100644 --- a/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsSelectors.cs +++ b/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsSelectors.cs @@ -1,3 +1,4 @@ +using com.mapcolonies.core.Services.LoggerService; using Unity.AppUI.Redux; namespace com.mapcolonies.yahalom.DataManagement.AppSettings @@ -8,5 +9,6 @@ public class AppSettingsSelectors public static readonly Selector OfflineConfigurationPathSelector = (state) => state.OfflineConfigurationFile; public static readonly Selector RemoteConfigurationUrlSelector = (state) => state.RemoteConfigurationUrl; public static readonly Selector WorkspacesPathSelector = (state) => state.WorkspacesDirectory; + public static readonly Selector LoggerSettings = (state) => state.LoggerSettings; } } diff --git a/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsState.cs b/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsState.cs index 55fce8d..3f121f7 100644 --- a/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsState.cs +++ b/Assets/com.mapcolonies.yahalom/DataManagement/AppSettings/AppSettingsState.cs @@ -1,4 +1,5 @@ using System; +using com.mapcolonies.core.Services.LoggerService; namespace com.mapcolonies.yahalom.DataManagement.AppSettings { @@ -28,5 +29,11 @@ public string WorkspacesDirectory get; set; } + + public LoggerSettings LoggerSettings + { + get; + set; + } = new LoggerSettings(); } } diff --git a/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs b/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs index 5512367..316398c 100644 --- a/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs +++ b/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs @@ -16,8 +16,10 @@ using VContainer.Unity; using com.mapcolonies.core.Localization; using com.mapcolonies.core.Localization.Constants; +using com.mapcolonies.core.Services.LoggerService; using com.mapcolonies.yahalom.AppMode; using com.mapcolonies.yahalom.AppMode.Modes; +using Unity.AppUI.Redux; using SimulationMode = com.mapcolonies.yahalom.AppMode.Modes.SimulationMode; namespace com.mapcolonies.yahalom.EntryPoint @@ -95,7 +97,15 @@ public AppStartUpController(InitializationPipeline initializationPipeline, Lifet AppModeSwitcher appModeSwitcher = _scope.Container.Resolve(); appModeSwitcher.RegisterChildScope(resolver); return default; - }) + }), + new ActionUnit("Logger Service", 0.1f, InitPolicy.Fail, + () => + { + ReduxStoreManager reduxStoreManager = scope.Container.Resolve(); + LoggerSettings loggerSettings = reduxStoreManager.Store.GetState(AppSettingsReducer.SliceName, AppSettingsSelectors.LoggerSettings); + LoggerService loggerService = scope.Container.Resolve(); + return loggerService.UpdateAppenderSettings(loggerSettings); + }), }) }; } diff --git a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs index 7e2d076..cd93f01 100644 --- a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs +++ b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs @@ -12,6 +12,7 @@ using VContainer; using VContainer.Unity; using com.mapcolonies.core.Localization; +using com.mapcolonies.core.Services.LoggerService; using com.mapcolonies.yahalom.AppMode; namespace com.mapcolonies.yahalom.EntryPoint @@ -48,6 +49,8 @@ protected override void Configure(IContainerBuilder builder) builder.Register(Lifetime.Singleton).AsSelf().As().As(); builder.Register(Lifetime.Singleton); + builder.RegisterInstance(LoggerInitializer.Logger).As().As(); + #endregion } } From 1811e32744dfa19dbfc9ec8a91d3d13771b75838 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:44:23 +0200 Subject: [PATCH 09/16] add force logic --- Assets/StreamingAssets/DataManagement/app_settings.json | 4 ++-- .../Services/LoggerService/LoggerService.cs | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Assets/StreamingAssets/DataManagement/app_settings.json b/Assets/StreamingAssets/DataManagement/app_settings.json index 7999cad..0b2190b 100644 --- a/Assets/StreamingAssets/DataManagement/app_settings.json +++ b/Assets/StreamingAssets/DataManagement/app_settings.json @@ -5,8 +5,8 @@ "remoteConfigurationUrl": "https://example.com/config/getConfig?v=10", "loggerSettings": { "serviceEnabled": true, - "minFileLogLevel": "ERROR", - "minHttpLogLevel": "ERROR", + "minFileLogLevel": "WARN", + "minHttpLogLevel": "WARN", "forceMinLogLevel": false } } diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 745c11f..0c738e6 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -195,8 +195,10 @@ public void Dispose() } } - public UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) + public async UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) { + if(!loggerSettings.ForceMinLogLevel) return false; + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); bool isDev = Application.isEditor || Debug.isDebugBuild; @@ -222,7 +224,7 @@ public UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) } } - return UniTask.CompletedTask; + return true; } } } From c439d15ef5e0e6a178845d20cbdab2a23217e37d Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:50:15 +0200 Subject: [PATCH 10/16] remove comments --- .../Services/LoggerService/LoggerService.cs | 6 ++--- .../LoggerService/LoggerServiceConfig.cs | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 0c738e6..864be64 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -7,7 +7,6 @@ using log4net.Core; using log4net.Layout; using log4net.Repository.Hierarchy; -using UnityEditor.PackageManager; using UnityEngine; using Debug = UnityEngine.Debug; @@ -72,7 +71,6 @@ private bool InitializeLog4Net() Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); - //TODO:Get _config.ForceMinLogLevel and override bool isDev = Application.isEditor || Debug.isDebugBuild; if (!isDev) @@ -197,7 +195,7 @@ public void Dispose() public async UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) { - if(!loggerSettings.ForceMinLogLevel) return false; + if (!loggerSettings.ForceMinLogLevel) return false; Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); bool isDev = Application.isEditor || Debug.isDebugBuild; @@ -209,7 +207,7 @@ public async UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) if (appender is log4net.Appender.AppenderSkeleton sk) { if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || - appender is log4net.Appender.RollingFileAppender) + appender is log4net.Appender.RollingFileAppender) { sk.Threshold = hierarchy.LevelMap[loggerSettings.MinFileLogLevel] ?? Level.Debug; } diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index 5c596d2..1ce7a32 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -1,4 +1,6 @@ using System.IO; +using com.mapcolonies.core.Utilities; +using Cysharp.Threading.Tasks; using Newtonsoft.Json; using UnityEngine; @@ -8,22 +10,23 @@ public class LoggerServiceConfig { private const string JsonFileName = "Logger/LoggerConfig.json"; - public LoggerSettings Settings { get; private set; } + public LoggerSettings Settings + { + get; + private set; + } public void Init() { - string filePath = Path.Combine(Application.streamingAssetsPath, JsonFileName); - - if (!File.Exists(filePath)) - { - Debug.LogError($"File {JsonFileName} not found at: " + filePath); - return; - } + InitAsync().Forget(); + } + private async UniTask InitAsync() + { try { - string jsonContent = File.ReadAllText(filePath); - Settings = JsonConvert.DeserializeObject(jsonContent); + Settings = await JsonUtilityEx.LoadJsonAsync(JsonFileName, FileLocation.StreamingAssets); + if (Settings == null) { Debug.LogError($"Failed to deserialize {JsonFileName} JSON content."); @@ -31,7 +34,7 @@ public void Init() } catch (System.Exception ex) { - Debug.LogError($"Error parsing file: {ex.Message}"); + Debug.LogError($"Error loading {JsonFileName}: {ex.Message}"); } } From 99c5387fe01537a18e9c83dff412fa06bbcdc450 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:51:44 +0200 Subject: [PATCH 11/16] format --- .../EntryPoint/MainAppLifetimeScope.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs index cd93f01..8bc2928 100644 --- a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs +++ b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs @@ -23,20 +23,20 @@ protected override void Configure(IContainerBuilder builder) { Debug.Log("Begin Configure Startup Registrations"); - #region StartUp +#region StartUp builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Transient); builder.Register(Lifetime.Singleton).As(); - #endregion +#endregion //TODO: This is a Demo script, will be deleted in the near future. builder.RegisterComponentInHierarchy(); Debug.Log("End Configure Startup Registrations"); - #region Services +#region Services builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton).AsSelf().As(); @@ -48,10 +48,9 @@ protected override void Configure(IContainerBuilder builder) builder.Register(Lifetime.Singleton).As().As(); builder.Register(Lifetime.Singleton).AsSelf().As().As(); builder.Register(Lifetime.Singleton); - builder.RegisterInstance(LoggerInitializer.Logger).As().As(); - #endregion +#endregion } } } From 53ba0014884ee962ae6b37b62a39ddf3c7541f7b Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:53:50 +0200 Subject: [PATCH 12/16] format file --- .../EntryPoint/MainAppLifetimeScope.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs index 8bc2928..b559499 100644 --- a/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs +++ b/Assets/com.mapcolonies.yahalom/EntryPoint/MainAppLifetimeScope.cs @@ -23,20 +23,20 @@ protected override void Configure(IContainerBuilder builder) { Debug.Log("Begin Configure Startup Registrations"); -#region StartUp + #region StartUp builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Transient); builder.Register(Lifetime.Singleton).As(); -#endregion + #endregion //TODO: This is a Demo script, will be deleted in the near future. builder.RegisterComponentInHierarchy(); Debug.Log("End Configure Startup Registrations"); -#region Services + #region Services builder.Register(Lifetime.Singleton); builder.Register(Lifetime.Singleton).AsSelf().As(); @@ -50,7 +50,7 @@ protected override void Configure(IContainerBuilder builder) builder.Register(Lifetime.Singleton); builder.RegisterInstance(LoggerInitializer.Logger).As().As(); -#endregion + #endregion } } } From b149cb36ce633f2f49e2033f1558d0956a0e97a4 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 10:58:00 +0200 Subject: [PATCH 13/16] add const --- .../Services/LoggerService/LoggerService.cs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 864be64..2344907 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -18,6 +18,10 @@ public class LoggerService : IDisposable private const string HttpEndpointUrl = "HttpEndpointUrl"; private const string HttpPersistenceDirectory = "HttpPersistenceDirectory"; private const string Pattern = "%date %-5level %logger - %message%newline"; + private const string ConsoleAppenderName = "Console"; + private const string FileAppenderName = "File"; + private const string HttpAppenderName = "Http"; + private readonly LoggerServiceConfig _config; private ILogHandler _originalUnityLogHandler; @@ -79,16 +83,16 @@ private bool InitializeLog4Net() { if (appender is log4net.Appender.AppenderSkeleton sk) { - if (appender.Name.Contains("Console", StringComparison.OrdinalIgnoreCase)) + if (appender.Name.Contains(ConsoleAppenderName, StringComparison.OrdinalIgnoreCase)) { sk.Threshold = hierarchy.LevelMap[_config.Settings.MinConsoleLogLevel] ?? Level.Debug; } - else if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || + else if (appender.Name.Contains(FileAppenderName, StringComparison.OrdinalIgnoreCase) || appender is log4net.Appender.RollingFileAppender) { sk.Threshold = hierarchy.LevelMap[_config.Settings.MinFileLogLevel] ?? Level.Debug; } - else if (appender.Name.Contains("Http", StringComparison.OrdinalIgnoreCase) || + else if (appender.Name.Contains(HttpAppenderName, StringComparison.OrdinalIgnoreCase) || appender is HttpAppender) { sk.Threshold = hierarchy.LevelMap[_config.Settings.MinHttpLogLevel] ?? Level.Debug; @@ -206,12 +210,12 @@ public async UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) { if (appender is log4net.Appender.AppenderSkeleton sk) { - if (appender.Name.Contains("File", StringComparison.OrdinalIgnoreCase) || + if (appender.Name.Contains(FileAppenderName, StringComparison.OrdinalIgnoreCase) || appender is log4net.Appender.RollingFileAppender) { sk.Threshold = hierarchy.LevelMap[loggerSettings.MinFileLogLevel] ?? Level.Debug; } - else if (appender.Name.Contains("Http", StringComparison.OrdinalIgnoreCase) || + else if (appender.Name.Contains(HttpAppenderName, StringComparison.OrdinalIgnoreCase) || appender is HttpAppender) { sk.Threshold = hierarchy.LevelMap[loggerSettings.MinHttpLogLevel] ?? Level.Debug; From bb4f40b1a92267cdd6ad0fa6eec39a2e71511782 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 11:08:29 +0200 Subject: [PATCH 14/16] change after reveiw --- .../Services/LoggerService/LoggerService.cs | 64 +++++++++---------- .../EntryPoint/AppStartUpController.cs | 2 +- 2 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 2344907..4a391fb 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -3,11 +3,13 @@ using com.mapcolonies.core.Services.LoggerService.CustomAppenders; using Cysharp.Threading.Tasks; using log4net; +using log4net.Appender; using log4net.Config; using log4net.Core; using log4net.Layout; using log4net.Repository.Hierarchy; using UnityEngine; +using ConsoleAppender = com.mapcolonies.core.Services.LoggerService.CustomAppenders.ConsoleAppender; using Debug = UnityEngine.Debug; namespace com.mapcolonies.core.Services.LoggerService @@ -74,29 +76,18 @@ private bool InitializeLog4Net() XmlConfigurator.Configure(logConfigFile); Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); - bool isDev = Application.isEditor || Debug.isDebugBuild; if (!isDev) { - foreach (var appender in hierarchy.GetAppenders()) + foreach (IAppender appender in hierarchy.GetAppenders()) { - if (appender is log4net.Appender.AppenderSkeleton sk) + if (appender is AppenderSkeleton sk) { if (appender.Name.Contains(ConsoleAppenderName, StringComparison.OrdinalIgnoreCase)) { sk.Threshold = hierarchy.LevelMap[_config.Settings.MinConsoleLogLevel] ?? Level.Debug; } - else if (appender.Name.Contains(FileAppenderName, StringComparison.OrdinalIgnoreCase) || - appender is log4net.Appender.RollingFileAppender) - { - sk.Threshold = hierarchy.LevelMap[_config.Settings.MinFileLogLevel] ?? Level.Debug; - } - else if (appender.Name.Contains(HttpAppenderName, StringComparison.OrdinalIgnoreCase) || - appender is HttpAppender) - { - sk.Threshold = hierarchy.LevelMap[_config.Settings.MinHttpLogLevel] ?? Level.Debug; - } else { sk.Threshold = Level.Debug; @@ -105,6 +96,8 @@ private bool InitializeLog4Net() sk.ActivateOptions(); } } + + ApplyFileAndHttpThresholds(hierarchy, _config.Settings); } ConsoleAppender consoleAppender = new ConsoleAppender(_originalUnityLogHandler); @@ -197,35 +190,38 @@ public void Dispose() } } - public async UniTask UpdateAppenderSettings(LoggerSettings loggerSettings) + private void ApplyFileAndHttpThresholds(Hierarchy hierarchy, LoggerSettings settings) { - if (!loggerSettings.ForceMinLogLevel) return false; - - Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); - bool isDev = Application.isEditor || Debug.isDebugBuild; - - if (!isDev) + foreach (IAppender appender in hierarchy.GetAppenders()) { - foreach (var appender in hierarchy.GetAppenders()) + if (appender is AppenderSkeleton sk) { - if (appender is log4net.Appender.AppenderSkeleton sk) + if (appender.Name.Contains(FileAppenderName, StringComparison.OrdinalIgnoreCase) || + appender is RollingFileAppender) { - if (appender.Name.Contains(FileAppenderName, StringComparison.OrdinalIgnoreCase) || - appender is log4net.Appender.RollingFileAppender) - { - sk.Threshold = hierarchy.LevelMap[loggerSettings.MinFileLogLevel] ?? Level.Debug; - } - else if (appender.Name.Contains(HttpAppenderName, StringComparison.OrdinalIgnoreCase) || - appender is HttpAppender) - { - sk.Threshold = hierarchy.LevelMap[loggerSettings.MinHttpLogLevel] ?? Level.Debug; - } - - sk.ActivateOptions(); + sk.Threshold = hierarchy.LevelMap[settings.MinFileLogLevel] ?? Level.Debug; + } + else if (appender.Name.Contains(HttpAppenderName, StringComparison.OrdinalIgnoreCase) || + appender is HttpAppender) + { + sk.Threshold = hierarchy.LevelMap[settings.MinHttpLogLevel] ?? Level.Debug; } + + sk.ActivateOptions(); } } + } + + public async UniTask UpdateLoggerSettings(LoggerSettings settings) + { + if (!settings.ForceMinLogLevel) return false; + + Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository(); + bool isDev = Application.isEditor || Debug.isDebugBuild; + + if (isDev) return false; + ApplyFileAndHttpThresholds(hierarchy, settings); return true; } } diff --git a/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs b/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs index 316398c..c493294 100644 --- a/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs +++ b/Assets/com.mapcolonies.yahalom/EntryPoint/AppStartUpController.cs @@ -104,7 +104,7 @@ public AppStartUpController(InitializationPipeline initializationPipeline, Lifet ReduxStoreManager reduxStoreManager = scope.Container.Resolve(); LoggerSettings loggerSettings = reduxStoreManager.Store.GetState(AppSettingsReducer.SliceName, AppSettingsSelectors.LoggerSettings); LoggerService loggerService = scope.Container.Resolve(); - return loggerService.UpdateAppenderSettings(loggerSettings); + return loggerService.UpdateLoggerSettings(loggerSettings); }), }) }; From aa657c6a6a9a9b2b029572b39b66857d747e90c7 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 30 Nov 2025 11:10:16 +0200 Subject: [PATCH 15/16] remove new aync method --- .../Services/LoggerService/LoggerServiceConfig.cs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index 1ce7a32..b8c297b 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -16,12 +16,7 @@ public LoggerSettings Settings private set; } - public void Init() - { - InitAsync().Forget(); - } - - private async UniTask InitAsync() + public async UniTask Init() { try { @@ -38,6 +33,7 @@ private async UniTask InitAsync() } } + public string GetSystemLogsDirectory() { if (Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsEditor) From e58e9124469babce4ba4a50efcbe52ef08dd3127 Mon Sep 17 00:00:00 2001 From: baruchInsert-tech Date: Sun, 7 Dec 2025 18:31:16 +0200 Subject: [PATCH 16/16] pr changes --- .../LoggerService/LoggerInitializer.cs | 7 +++++- .../Services/LoggerService/LoggerService.cs | 2 +- .../LoggerService/LoggerServiceConfig.cs | 4 ++-- .../Utilities/JsonUtilityEx.cs | 24 +++++++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs index e9da7d8..f341da9 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerInitializer.cs @@ -7,7 +7,12 @@ namespace com.mapcolonies.core.Services.LoggerService public static class LoggerInitializer { private const string AdditionalRevisionSeparator = "f"; - public static LoggerService Logger; + + public static LoggerService Logger + { + get; + private set; + } [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] public static void Init() diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs index 4a391fb..f6d4e33 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerService.cs @@ -33,7 +33,7 @@ public LoggerService(LoggerServiceConfig config) { _config = config; - if (!config.Settings.ServiceEnabled) return; + if (!_config.Settings.ServiceEnabled) return; bool success = InitializeLog4Net(); diff --git a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs index b8c297b..12fdaec 100644 --- a/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs +++ b/Assets/com.mapcolonies.core/Services/LoggerService/LoggerServiceConfig.cs @@ -16,11 +16,11 @@ public LoggerSettings Settings private set; } - public async UniTask Init() + public void Init() { try { - Settings = await JsonUtilityEx.LoadJsonAsync(JsonFileName, FileLocation.StreamingAssets); + Settings = JsonUtilityEx.LoadJson(JsonFileName); if (Settings == null) { diff --git a/Assets/com.mapcolonies.core/Utilities/JsonUtilityEx.cs b/Assets/com.mapcolonies.core/Utilities/JsonUtilityEx.cs index ae00e6e..d00272c 100644 --- a/Assets/com.mapcolonies.core/Utilities/JsonUtilityEx.cs +++ b/Assets/com.mapcolonies.core/Utilities/JsonUtilityEx.cs @@ -84,5 +84,29 @@ public static async UniTask DoesJsonExistAsync(string relativePath, FileLo return await FileIOUtility.FileExistsAsync(path); } + + public static T LoadJson(string relativePath, FileLocation location = FileLocation.StreamingAssets) + { + string path; + + switch (location) + { + case FileLocation.PersistentData: + path = Path.Combine(Application.persistentDataPath, relativePath); + break; + + case FileLocation.StreamingAssets: + path = Path.Combine(Application.streamingAssetsPath, relativePath); + break; + + default: + Debug.LogWarning($"Unknown file location {location}. Using streaming assets as default."); + path = Path.Combine(Application.streamingAssetsPath, relativePath); + break; + } + + string json = File.ReadAllText(path); + return JsonConvert.DeserializeObject(json); + } } }