Может ли NLog получить переменную, значение которой изменяется во время выполнения, из приложения C#? Ex. Идентификатор партии - PullRequest
0 голосов
/ 27 марта 2020

Может ли приложение C# передавать NLog переменную во время выполнения, которая затем может использоваться в качестве входных данных для вставки в базу данных? Ex. У меня есть приложение, где он получает, во время обработки файлов, уникальный пакетный идентификатор в качестве параметра командной строки. Несколько экземпляров этого исполняемого файла могут быть запущены одновременно, и каждое из них получит свой собственный Batch ID. Ради устранения неполадок ... ДЕЙСТВИТЕЛЬНО мне нужно, чтобы NLog передавал этот пакетный идентификатор для вставки журналов. Я видел, что был $ {var} макет рендеринга , но он должен быть уже определен в файле конфигурации. Все эти исполняемые файлы будут совместно использовать один и тот же файл конфигурации. Так что это не похоже на решение. Любая помощь и примеры кода (или ссылки на примеры) приветствуются. Спасибо за ваше время.

1 Ответ

2 голосов
/ 27 марта 2020

Похоже, ваш batchId является глобальным для процесса, поэтому вы можете проверить Gdc layout renderer.

Global Diagnosti c Context - словарь структура для хранения значений для каждого экземпляра приложения.

Поддерживаемые платформы: Все (NLog 4.1 позволяет хранить объекты любого типа, а не только String)

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

В документации объясняется, как ее использовать, но очень кратко: в вашем файле конфигурации вы будете использовать ${gdc:item=batchId}, где вы хотите поместить batchId в ваших логах. Затем, где-нибудь в приложении (в функции Main, я бы поставил), вы должны сделать: GlobalDiagnosticsContext.Set("batchId", batchId);.

Я не знаю, собственно, пространство имен, в котором живет GlobalDiagnosticsContext.

Если GlobalDiagnosticsContext слишком широк, существует также Сопоставленный логический контекст диагностики (MDL C) (заменяет устаревший MD C, поскольку MDL C также поддерживает асинхронный c Задачи)

...