NLOG: как использовать переменную для указания цели - PullRequest
0 голосов
/ 05 марта 2019

Можно ли использовать переменную для указания конкретной цели?

Я хочу переключаться между базой данных и ведением журнала в зависимости от среды, в которой запущено мое приложение.

Это, однако, не похоже на работу:

<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);

1 Ответ

0 голосов
/ 05 марта 2019

Один из способов сделать это - создать другой файл Web.config в зависимости от среды, и вы измените строку подключения.Это метод, который я использую.

Кроме того, NLOG инициализируется после запуска приложения, поэтому вы не можете изменить то, что написано в NLOG.config

...