【问题标题】:c# NLog custom delimiter in programmatic configurationc# NLog 编程配置中的自定义分隔符
【发布时间】:2020-02-21 16:08:16
【问题描述】:

我在 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}" 在这里不起作用。

【问题讨论】:

    标签: c# customization nlog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      试试这样:

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

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

      【讨论】:

      • 我想尽可能避免与 nlog 相关的字符串连接。
      猜你喜欢
      • 2012-04-10
      • 2018-01-15
      • 2011-07-04
      • 2017-01-25
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多