Можно ли использовать переменную для указания конкретной цели?
Я хочу переключаться между базой данных и ведением журнала в зависимости от среды, в которой запущено мое приложение.
Это, однако, не похоже на работу:
<logger name="MyLogger" minlevel="Warn" writeTo="${var:myTargetName}" />
В моем приложении запускается (ошибка появляется в первой строке):
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
var config = LoadConfiguration();
NLog.LogManager.Configuration.Variables["myTargetName"] = config.GetSection("LogTargets:TargetName").Value;
NLog.LogManager.KeepVariablesOnReload = true;
NLog.LogManager.Configuration.Reload();
При запуске в приложении выдается следующее исключение:
"Target ${var:myTargetName} not found."
Полагаю, переменные недоступны при разборе файла конфигурации.
Как я могу установить переменные, чтобы NLOG использовал их при разборе файла конфигурации?
Можно ли использовать переменную для установки значения атрибута?
Или это не поддерживается NLOG?
Примечание: у меня есть другая переменная в конфигурации NLOG, которая работает
<target xsi:type="Database" name="databaseTarget">
<connectionString>${var:connectionString}</connectionString>
...........
</target>
Полагаю, что при запуске логгеры проверяются один раз, а фактическая цель оценивается при возникновении логгента.
Обновление: получил работу без переменных в файле конфигурации.
Мне пришлось удалить регистратор из конфига и создать его с помощью кода
var myCustomTarget = NLog.LogManager.Configuration.FindTargetByName(config.GetSection("LogTargets:TargetName").Value);
NLog.LogManager.Configuration.AddRuleForAllLevels(myCustomTarget , "MyLogger", true);