From ec1b017946a522fcb9cd09208093ad36c051a3d2 Mon Sep 17 00:00:00 2001 From: z__ Date: Fri, 4 Feb 2022 14:33:32 +0700 Subject: [PATCH] added nlog custom targets assemblies loading --- Torch.Server/Program.cs | 7 +++--- Torch/Patches/GameAnalyticsPatch.cs | 3 +-- Torch/Utils/TorchLogManager.cs | 34 +++++++++++++++++++++++++++-- 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Torch.Server/Program.cs b/Torch.Server/Program.cs index 80ec126..2b41abf 100644 --- a/Torch.Server/Program.cs +++ b/Torch.Server/Program.cs @@ -63,9 +63,7 @@ namespace Torch.Server File.Move(oldTorchCfg, torchCfg, true); Target.Register(nameof(LogViewerTarget)); - TorchLogManager.Configuration = new XmlLoggingConfiguration(newNlog); - LogManager.Configuration = TorchLogManager.Configuration; - LogManager.ReconfigExistingLoggers(); + TorchLogManager.SetConfiguration(new XmlLoggingConfiguration(newNlog)); var config = Persistent.Load(torchCfg); config.Data.InstanceName = instanceName; @@ -84,6 +82,9 @@ namespace Torch.Server Environment.Exit(1); TorchLauncher.Launch(workingDir, binDir); + TorchLogManager.SetConfiguration(TorchLogManager.Configuration, + Environment.GetEnvironmentVariable("TORCH_LOG_EXTENSIONS_PATH") ?? + Path.Combine(instancePath, "LoggingExtensions")); CopyNative(binDir); initializer.Run(isService, instanceName, instancePath); diff --git a/Torch/Patches/GameAnalyticsPatch.cs b/Torch/Patches/GameAnalyticsPatch.cs index 69dcb7c..e3f66ab 100644 --- a/Torch/Patches/GameAnalyticsPatch.cs +++ b/Torch/Patches/GameAnalyticsPatch.cs @@ -42,9 +42,8 @@ namespace Torch.Patches private static void FixLogging() { + TorchLogManager.RestoreGlobalConfiguration(); _setLogger(null, LogManager.GetLogger("GameAnalytics")); - if (LogManager.Configuration is not XmlLoggingConfiguration) - LogManager.Configuration = TorchLogManager.Configuration; } private static bool PatchLogger() diff --git a/Torch/Utils/TorchLogManager.cs b/Torch/Utils/TorchLogManager.cs index bce4f73..0022d96 100644 --- a/Torch/Utils/TorchLogManager.cs +++ b/Torch/Utils/TorchLogManager.cs @@ -1,8 +1,38 @@ -using NLog.Config; +using System; +using System.IO; +using System.Runtime.Loader; +using NLog; +using NLog.Config; namespace Torch.Utils; public static class TorchLogManager { - public static LoggingConfiguration Configuration { get; set; } + private static readonly AssemblyLoadContext LoadContext = new("TorchLog"); + + public static LoggingConfiguration Configuration { get; private set; } + + public static void SetConfiguration(LoggingConfiguration configuration, string extensionsDir = null) + { + Configuration = configuration; + LogManager.Setup() + .SetupExtensions(builder => + { + if (extensionsDir is null || !Directory.Exists(extensionsDir)) + return; + foreach (var file in Directory.EnumerateFiles(extensionsDir, "*.dll", SearchOption.AllDirectories)) + { + builder.RegisterAssembly(LoadContext.LoadFromAssemblyPath(file)); + } + }) + .SetupLogFactory(builder => builder.SetThrowConfigExceptions(true)) + .LoadConfiguration(configuration); + LogManager.ReconfigExistingLoggers(); + } + + public static void RestoreGlobalConfiguration() + { + LogManager.Configuration = Configuration; + LogManager.ReconfigExistingLoggers(); + } } \ No newline at end of file