[c#NLog自定义分隔符在程序化配置中

问题描述 投票:3回答:2

我正在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 = "${longdate}${delim}${level:upperCase=true}${delim}${message}",在这里不起作用。

c# customization nlog
2个回答
2
投票

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


1
投票

尝试这样:

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

${}语法,表示将被替换的内容。因此,要使用字符串变量进行串联,您需要添加具有字符串串联的字符。

© www.soinside.com 2019 - 2024. All rights reserved.