【问题标题】:Nlog config escape colonNlog 配置转义冒号
【发布时间】: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


【解决方案1】:

你需要逃避它。用。。。来代替 ”:”

【讨论】:

  • 在 StackOverflow 上,您也需要转义它们,已修复。双点也称为冒号
  • 所以我必须把 C:CompanyLogs。正确的?
  • 是的,它是正确的
  • 我认为这不起作用,因为它试图将日志保存在 C:log.log 中,所以它没有采用完整路径
  • 哦,看起来你也需要转义反斜杠
猜你喜欢
  • 1970-01-01
  • 2018-04-04
  • 2013-01-30
  • 1970-01-01
  • 2012-04-13
  • 2011-11-20
  • 2017-06-04
  • 2011-02-17
  • 2015-08-21
相关资源
最近更新 更多