假设我有以下NLog配置:
<target name="logfile" xsi:type="File" fileName="${basedir}/Logs/nLog.csv" archiveAboveSize="50000000" archiveNumbering="Sequence" maxArchiveFiles="3">
<layout xsi:type="CsvLayout">
<column name="time" layout="${longdate}" />
<column name="level" layout="${level}"/>
<column name="message" layout="${message}" />
</layout>
</target>
这个配置已经使用了一段时间,现在我想添加另一个列,如下所示:
<layout xsi:type="CsvLayout">
<column name="time" layout="${longdate}" />
<column name="level" layout="${level}"/>
<column name="message" layout="${message}" />
<column name="codeLine" layout="${event-context:item=codeLine}" />
</layout>
问题:现有的* csv文件未正确更新(新列未添加到文件中)。我仍然可以登录到该文件,但新列将被忽略。有没有办法让NLog自动更新文件?删除日志文件以便重新创建它不是一种选择。
在这种情况下,您可以使用自定义变量。更新配置文件以定义自定义变量,
<variable name ="variable1" value =""/>
然后使用变量更新布局渲染器,
<target name="csv" xsi:type="File" filename="filename">
<layout xsi:type="CsvLayout" withheader="true">
<column name="Column1" layout="${var:variable1}" quoting="Nothing"/>
</layout>
</target>
您可以从C#client设置变量的值,
LogManager.Configureation.Variables["externalDevice"] = "ValueOf_variable1";
你有没有看过关于这个问题的github Wiki链接varlayoutrenderer。