【问题标题】:C# NLog - How to stop replacing newlines by NLog?C# NLog - 如何停止用 NLog 替换换行符?
【发布时间】:2021-05-31 09:36:06
【问题描述】:

我试图弄清楚如何阻止 NLog 替换我正在记录的字符串中的换行符。我希望输出包含所有换行符,而不是将整个输出放在一行上。

有人可以帮忙吗?

配置:

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="udp" xsi:type="NLogViewer" address="udp4://192.168.0.101:7071" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="udp" />
  </rules>
</nlog>

代码:

var logger = LogManager.GetLogger($"Test");
var dumpStr = builder.ToString();
logger.Info(dumpStr);

【问题讨论】:

  • builder 的内容是什么?你有使用文件目标的正确换行符吗?
  • 这很可能与查看器有关。我会按照 Fildor 的建议检查文件目标。
  • Builder 是一个 StringBuilder ,其中包含一个字符串列表,可以在控制台上正确显示为一个列表。
  • 目标是NLog

标签: c# nlog


【解决方案1】:

输出的外观由layout 控制。 message 已格式化。您可以使用 ${message:raw=true} 声明告诉它输出 raw。

default 布局为:

${longdate}|${level:uppercase=true}|${logger}|${message}

所以我们将其更改为:

${longdate}|${level:uppercase=true}|${logger}|${message:raw=true}

您可以像这样将此选项添加到您的目标中:

<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <targets>
    <target name="udp" 
            xsi:type="NLogViewer" 
            address="udp4://192.168.0.101:7071" 
            layout="${longdate}|${level:uppercase=true}|${logger}|${message:raw=true}"
    />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="udp" />
  </rules>
</nlog>

【讨论】:

  • 我很困惑${message:raw=true} 给出的结果与${message} 不同,在这种情况下logger.Info(dumpStr)。 NLog 只接收没有任何附加参数的日志消息时不执行任何格式化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多