Files
QuartZ-dump/GlobalTorch/API/Util/GlobalLogManager.cs
2024-12-29 21:15:58 +01:00

74 lines
2.9 KiB
C#

using System.Collections.Generic;
using Global.API.Util;
using Global.Shared.Logging;
using NLog;
using NLog.Config;
using NLog.Targets;
namespace Global
{
public static class GlobalLogManager
{
private static readonly Dictionary<string, FileTarget> Targets = new Dictionary<string, FileTarget>();
public static IPluginLogger GetLogger(string name)
{
return new TorchLogger(name);
}
public static void PatchToUseCustomFileLogger(string name, string filename = null)
{
if (filename == null) filename = name;
var rules = LogManager.Configuration.LoggingRules;
for (var i = rules.Count - 1; i >= 0; i--)
if (rules[i].NameMatches(name))
rules.RemoveAtFast(i);
var logTarget = Targets.ComputeIfAbsent(filename, fn => new FileTarget(filename)
{
FileName = $"Logs/{fn}-latest.log",
Layout = "${var:logStamp} ${logger}: ${var:logContent}",
ArchiveOldFileOnStartup = true,
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
ArchiveDateFormat = "dd-MM-yyyy",
ArchiveFileName = $"Logs/Archive/{fn}-{{###}}.zip",
EnableArchiveFileCompression = true
});
var debugRule = new LoggingRule(name, LogLevel.Debug, logTarget);
rules.Insert(0, debugRule);
if (name == "Keen" && GlobalPlugin.LegacyConfig.LogKeenToConsole)
{
var consoleRule = new LoggingRule(name, LogLevel.Info,
LogManager.Configuration.FindTargetByName("console"));
consoleRule.Targets.Add(LogManager.Configuration.FindTargetByName("wpf"));
rules.Insert(0, consoleRule);
}
LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();
}
public static Logger GetCustomFileLogger(string name, string filename = null)
{
if (filename == null) filename = name;
var rules = LogManager.Configuration.LoggingRules;
var logTarget = Targets.ComputeIfAbsent(filename, fn => new FileTarget(filename)
{
FileName = $"Logs/{fn}-latest.log",
Layout = "${var:logStamp} ${logger}: ${var:logContent}",
ArchiveOldFileOnStartup = true,
ArchiveNumbering = ArchiveNumberingMode.DateAndSequence,
ArchiveDateFormat = "dd-MM-yyyy",
ArchiveFileName = $"Logs/Archive/{fn}-{{###}}.zip",
EnableArchiveFileCompression = true
});
var logRule = new LoggingRule(name, LogLevel.Debug, logTarget);
rules.Insert(0, logRule);
LogManager.Configuration.Reload();
return LogManager.GetLogger(name);
}
}
}