Compare commits

..

3 Commits

Author SHA1 Message Date
z__
879a373e6a added possibility to call SetConfiguration again if needed 2022-02-04 14:42:37 +07:00
z__
ec1b017946 added nlog custom targets assemblies loading 2022-02-04 14:33:32 +07:00
z__
cf75210304 fixed game analytics logger crash 2022-02-04 13:44:04 +07:00
3 changed files with 54 additions and 7 deletions

View File

@@ -63,8 +63,7 @@ namespace Torch.Server
File.Move(oldTorchCfg, torchCfg, true);
Target.Register<LogViewerTarget>(nameof(LogViewerTarget));
LogManager.Configuration = new XmlLoggingConfiguration(newNlog);
LogManager.ReconfigExistingLoggers();
TorchLogManager.SetConfiguration(new XmlLoggingConfiguration(newNlog));
var config = Persistent<TorchConfig>.Load(torchCfg);
config.Data.InstanceName = instanceName;
@@ -83,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);

View File

@@ -5,6 +5,7 @@ using System.Runtime.CompilerServices;
using NLog;
using NLog.Config;
using Torch.Managers.PatchManager;
using Torch.Utils;
namespace Torch.Patches
{
@@ -36,16 +37,13 @@ namespace Torch.Patches
_log.Warn("GALogger constructor is unknown. Logging may not function.");
return;
}
ctx.GetPattern(ctor).Prefixes.Add(typeof(GameAnalyticsPatch).GetMethod(nameof(PatchLogger),
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public));
ctx.GetPattern(ctor).AddPrefix(nameof(PatchLogger));
}
private static void FixLogging()
{
TorchLogManager.RestoreGlobalConfiguration();
_setLogger(null, LogManager.GetLogger("GameAnalytics"));
if (!(LogManager.Configuration is XmlLoggingConfiguration))
LogManager.Configuration = new XmlLoggingConfiguration(Path.Combine(
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location) ?? Environment.CurrentDirectory, "NLog.config"));
}
private static bool PatchLogger()

View File

@@ -0,0 +1,47 @@
using System;
using System.IO;
using System.Runtime.Loader;
using NLog;
using NLog.Config;
namespace Torch.Utils;
public static class TorchLogManager
{
private static AssemblyLoadContext LoadContext;
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;
if (LoadContext is null)
{
LoadContext = new("TorchLog");
foreach (var file in Directory.EnumerateFiles(extensionsDir, "*.dll", SearchOption.AllDirectories))
{
builder.RegisterAssembly(LoadContext.LoadFromAssemblyPath(file));
}
return;
}
foreach (var assembly in LoadContext.Assemblies)
{
builder.RegisterAssembly(assembly);
}
})
.SetupLogFactory(builder => builder.SetThrowConfigExceptions(true))
.LoadConfiguration(configuration);
LogManager.ReconfigExistingLoggers();
}
public static void RestoreGlobalConfiguration()
{
LogManager.Configuration = Configuration;
LogManager.ReconfigExistingLoggers();
}
}