【发布时间】:2023-01-11 04:25:55
【问题描述】:
我有一个包含以下变量的 NLog.config 文件
<variables>
<variable name="LogsFilePath" value="${appsetting:item=LogsFolderPath:default=C:\Company\Logs}" >
</variables>
<targets>
<target name="File"
xsi:type="File"
fileName="${LogsFilePath}\${event-properties:FileName}.log" />
</targets>
<rules>
<rule logger="DynamicLogger_*" minLevel="Trace" writeTo="File" />
</rules>
当app.config 文件中没有值时,采用的默认值仅为C(因为有冒号)。
我的目标是这样的
另外,如果我在配置文件中使用变量,如${var:LogsFilePath},我会因为冒号而遇到问题。我必须将它与静态形式一起使用 ${LogsFilePath}
我该如何解决这个问题并在 appsetting 变量的默认路径中使用路径作为默认值?
【问题讨论】:
-
它在我添加转义符时有效:
value="${appsetting:item=LogsFolderPath:default=C\:\\Company\\Logs}"。另一种方法是使用 whenEmpty。value="${appsetting:item=LogsFolderPath:whenEmpty=C\:\\Company\\Logs}"。 (当然回退要求你有有效的文件权限在 C 驱动器上写入文件) -
也许还可以像这样为文件名添加回退:
fileName="${LogsFilePath}\${event-properties:FileName:whenEmpty=App}.log"。考虑使用 NLog GDC 而不是 NLog LogEvent-Properties 作为文件名。另见github.com/NLog/NLog/wiki/Context -
@RolfKristensen 我正在使用属性,因为我想对动态创建的不同记录器使用相同的目标,并且我希望有可能指定文件名。在我的代码中,我创建了名称为“DynamicLogger_*”的记录器,并为它们设置了文件名属性。我已经用规则部分编辑了问题。我不确定 GDC 是否对此有效,因为它是动态的。
标签: c# .net app-config nlog