Я пытаюсь генерировать цели и регистратор во время выполнения, основываясь на другой цели.Давайте предположим, что у меня есть регистратор функций Foo
: я бы хотел сгенерировать отдельные правила для Foo.1
, Foo.2
и т. Д. И т. Д., Но я не знаю, каким будет последний регистратор, который мне придется создать(таким образом, я не могу определить их декларативно).
До сих пор я делал что-то вроде этого:
public GetNewClonedLogger(int fooId)
{
var config = NLog.LogManager.Configuration;
var newFooName = $"Foo.{fooId}";
FileTarget baseTarget = NLog.LogManager.Configuration.FindTargetByName<FileTarget>("Foo");
// Copy the base target
var newTarget = new FileTarget(newFooName)
{
Layout = baseTarget.Layout,
CreateDirs = true,
FileName = baseTarget .FileName.ToString().Replace("${var:filename}", newFooName),
ArchiveAboveSize = baseTarget.ArchiveAboveSize,
BufferSize = baseTarget.BufferSize,
ArchiveFileName = baseTarget.ArchiveFileName,
MaxArchiveFiles = baseTarget.MaxArchiveFiles,
ArchiveDateFormat = baseTarget.ArchiveDateFormat,
ArchiveEvery = baseTarget.ArchiveEvery,
FileAttributes = baseTarget.FileAttributes,
KeepFileOpen = baseTarget.KeepFileOpen,
ArchiveNumbering = baseTarget.ArchiveNumbering,
};
// Add configs & flush
NLog.LogManager.Configuration.AddTarget(newTarget);
NLog.LogManager.Configuration.AddRuleForAllLevels(newTarget, newFooName);
// I tried every combinations of the following, without success
NLog.LogManager.ReconfigExistingLoggers();
NLog.LogManager.Configuration = config;
NLog.LogManager.Configuration.Reload();
NLog.LogManager.GetLogger(newFooName);
}
Эта функция возвращает регистратор, который кажется нормальным в каждой точке:имя цели в порядке, имя файла в порядке, NLog.LogManager.Configuration
имеет новое правило с правильным именем (Foo.1
, Foo.2
, ...), как и AllTargets
.Но когда я регистрируюсь, используя возвращенный регистратор, файл не создается, и это точно, как будто ничего не произошло вообще ...
Я пробовал решение, предложенное в этой теме ,без успеха .... Чего мне не хватает?
Спасибо за помощь!