我正在使用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属性)
因此,当我记录内容时,我可以通过
访问MemoryTargetMemoryTarget.Logs
我没有得到的结果:我也在我的CsvLayout中配置了 WithHeader 属性我在MemoryTarget.Logs中看不到标题。我期待MemoryTarget.Logs [0]中的 Name,AuditStamp ,但它会立即从记录的内容开始。
有人可以告诉我为什么标题不是MemoryTarget.Logs列表的一部分吗?
答案 0 :(得分:1)
标题(和页脚)仅供TargetWithLayoutHeaderAndFooter
由于MemoryTarget
源自TargetWithLayout
而非TargetWithLayoutHeaderAndFooter
设置,因此WithHeader = true
对MemoryTarget
没有任何影响。因此,您无法在MemoryTarget.Logs
中获得标题。
为了正确输出标题,您需要使用支持它的目标之一:
或者您可以在LogEventInfo.CreateNullEvent()
的帮助下直接访问代码中生成的标头并致电:
string header = ((CsvLayout)MemoryTarget.Layout).Header
.Render(LogEventInfo.CreateNullEvent());