Есть несколько способов заставить это работать. Я думаю, что ваши решения будут работать. Лично я бы выбрал одно из этих решений:
GD C подход
Это действительно простое решение. Используйте Глобальный контекст диагностики и при необходимости измените значение. Так что нет необходимости повторять в конфиге.
Установите элемент на начальное значение:
GlobalDiagnosticsContext.Set("myPath", basePath1);
И при необходимости, например, по таймеру или при нажатии кнопки, измените basepath
GlobalDiagnosticsContext.Set("myPath", basePath2);
В конфигурации: fileName="${gdc:myPath}\E.log"
См. GD C
Настраиваемый метод рендеринга макета
A немного более автоматизированный, создайте пользовательский макет рендеринга, который возвращает различные пути в зависимости от времени.
Регистрация (в main
или app_start
)
using NLog.LayoutRenderers;
LayoutRenderer.Register("myPath", () =>
{
if (DateTime.Now.Hour > 16 && DateTime.Now.Hour < 18)
{
return myTempPath;
}
return myRegularPath;
});
В конфигурации: fileName="${myPath}\E.log"
См. Как написать собственный рендерер макета
Без подхода кода
Вы также можете сделать это без кода, но конфигурация будет сложной и это может повлиять на производительность при регистрации с очень высокой нагрузкой.
См. условия