У меня есть два задания таймера SharePoint, которые существуют в одном и том же процессе одновременно. Работы не имеют ничего общего друг с другом и не разделяют конфигурацию NLog. Однако они имеют тенденцию пересекаться друг с другом конфигурациями, регистрируясь в файле других.Несколько приложений в одном процессе с использованием NLog с разными целями
Вся конфигурация выполняется по коду. Цели называются и имя журнала. И я обязательно получаю ссылку на текущий LogManager.Configuration и перезагружаю его.
конфигурации в первой работы таймера:
if (LogManager.Configuration == null)
{
LogManager.Configuration = new LoggingConfiguration();
}
var fileTarget = new FileTarget();
LogManager.Configuration.AddTarget("file", fileTarget);
fileTarget.Encoding = Encoding.UTF8;
fileTarget.FileName = "C:/OTDPLog/Log-{0}.txt"._Format(DateTime.Now.ToString("dd-MM-yyyy_hhmmss"));
fileTarget.Layout = "${date:format=HH\\:mm\\:ss} ${logger} ${event-context:item=Dev} [${level:uppercase=true}]\t${message}. ${exception:format=ToString,StackTrace}";
var async = new AsyncTargetWrapper(fileTarget, 5000, AsyncTargetWrapperOverflowAction.Block);
var rule = new LoggingRule("OTDP", LogLevel.Debug, async);
LogManager.Configuration.LoggingRules.Add(rule);
LogManager.Configuration.Reload();
Использование:
var logger = LogManager.GetLogger("OTDP");
logger.Info("bla bla bla");
Конфигурация для другой работы:
if (LogManager.Configuration == null)
{
LogManager.Configuration = new LoggingConfiguration();
}
var fileTarget = new FileTarget();
LogManager.Configuration.AddTarget("file", fileTarget);
fileTarget.Encoding = Encoding.UTF8;
fileTarget.FileName = "C:/WikiLog/Log-{0}.txt"._Format(DateTime.Now.ToString("dd-MM-yyyy_hhmmss"));
fileTarget.Layout = "${date:format=HH\\:mm\\:ss} ${logger} ${event-context:item=Dev} [${level:uppercase=true}]\t${message}. ${exception:format=ToString,StackTrace}";
var async = new AsyncTargetWrapper(fileTarget, 5000, AsyncTargetWrapperOverflowAction.Block);
var rule = new LoggingRule("Wiki", LogLevel.Debug, async);
LogManager.Configuration.LoggingRules.Add(rule);
LogManager.Configuration.Reload();
Использование:
var logger = LogManager.GetLogger("Wiki");
logger.Info("bla bla bla");
Как настроить регистраторы для разных приложений в одном и том же процессе?
Что вы подразумеваете под «склонностью к перекрытию»? Это иногда случается, а иногда нет? Может быть, некоторая ошибка в коде, которая получает неправильный журнал? –