74 lines
2.9 KiB
C#
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);
|
|
}
|
|
}
|
|
} |