NLog:使用CsvLayout在MemoryTarget中使用WithHeader属性

时间:2014-04-08 14:35:11

标签: c# csv nlog

我正在使用c#+ NLog并尝试写入 MemoryTarget 。我有下面的配置:

        MemoryTarget = new MemoryTarget();

        CsvLayout csvLayout = new CsvLayout() { Delimiter = CsvColumnDelimiterMode.Comma, WithHeader = true };

        csvLayout.Columns.Add(new CsvColumn() { Name = "Name", Layout = "${event-context:item=Name}" });
        csvLayout.Columns.Add(new CsvColumn() { Name = "AuditTimeStamp", Layout = "${event-context:item=AuditTimeStamp}" });

        MemoryTarget.Layout = csvLayout;

(MemoryTarget当然是NLog.MemoryTarget属性)

因此,当我记录内容时,我可以通过

访问MemoryTarget
MemoryTarget.Logs

我没有得到的结果:我也在我的CsvLayout中配置了 WithHeader 属性我在MemoryTarget.Logs中看不到标题。我期待MemoryTarget.Logs [0]中的 Name,AuditStamp ,但它会立即从记录的内容开始。

有人可以告诉我为什么标题不是MemoryTarget.Logs列表的一部分吗?

1 个答案:

答案 0 :(得分:1)

标题(和页脚)仅供TargetWithLayoutHeaderAndFooter

中取消使用的目标使用

由于MemoryTarget源自TargetWithLayout而非TargetWithLayoutHeaderAndFooter设置,因此WithHeader = trueMemoryTarget没有任何影响。因此,您无法在MemoryTarget.Logs中获得标题。

为了正确输出标题,您需要使用支持它的目标之一:

  • 控制台
  • 彩色控制台
  • 文件
  • 邮件
  • 调试器

或者您可以在LogEventInfo.CreateNullEvent()的帮助下直接访问代码中生成的标头并致电:

string header = ((CsvLayout)MemoryTarget.Layout).Header
    .Render(LogEventInfo.CreateNullEvent());