c# NLog настраиваемый разделитель в программной c конфигурации - PullRequest
3 голосов
/ 21 февраля 2020

Я использую NLog в VS2019, и при настройке программы регистратора c (без внешнего файла конфигурации nlog) перед первым использованием я определяю регистраторы там как

var logConsole = new NLog.Targets.ColoredConsoleTarget()
{
    Name = "logconsole",
    Layout = "${longdate}|${level:upperCase=true}|${message}"
};
config.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Debug, logConsole));

В настоящее время у меня есть разделитель | там жестко закодирован.

Как я могу сделать переменную разделителя? Определение string delim = "|" и затем установка Layout на Layout = "${longdate}${delim}${level:upperCase=true}${delim}${message}" здесь не работает.

Ответы [ 2 ]

2 голосов
/ 21 февраля 2020

Вы можете использовать контекстную конструкцию для этого в NLog, например, GlobalDiagnosticsContext.

Пример:

var logConsole = new NLog.Targets.ColoredConsoleTarget()
{
    Name = "logconsole",
    Layout = "${longdate}${gdc:item=delimiter}${level:upperCase=true}${gdc:item=delimiter}${message}"
};
config.LoggingRules.Add(new NLog.Config.LoggingRule("*", LogLevel.Debug, logConsole));

И установить в своем коде:

GlobalDiagnosticsContext.Set("delimiter", "|");

Вы можете изменить разделитель, затем в коде в других местах.

GlobalDiagnosticsContext является глобальным для всего приложения. Если вам нужен более ограниченный объем, это также возможно! См. NLog - Контекст

1 голос
/ 21 февраля 2020

Попробуйте так:

string delim = "|";
Layout = "${longdate}" +delim+"${level:upperCase=true}"+delim+"${message}";

Синтаксис ${} обозначает, что будет заменено. Таким образом, для объединения со строковой переменной вам необходимо добавить символы с конкатенацией строк.

...