NLog:更改配置后更新CSV结构

问题描述 投票:1回答:1

假设我有以下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自动更新文件?删除日志文件以便重新创建它不是一种选择。

csv nlog target auto-update
1个回答
0
投票

在这种情况下,您可以使用自定义变量。更新配置文件以定义自定义变量,

<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

© www.soinside.com 2019 - 2024. All rights reserved.