编程配置中的 c# NLog 自定义定界符

c# NLog custom delimiter in programmatic configuration

我在 VS2019 中使用 NLog,在首次使用前以编程方式设置记录器(无外部 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}" 在这里不起作用。

这样试试:

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

${} 语法,表示将被替换的内容。因此,要与字符串变量连接,您需要添加具有字符串连接的字符。

您可以在 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 - Context