You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NLog配置中appsetting默认路径冒号引发异常的解决方法

解决NLog配置中默认路径冒号截断及变量引用问题

问题根源

  1. ${appsetting}渲染器以冒号(:)作为参数分隔符,默认值里的C:\冒号会被误判为参数分隔标记,导致默认值仅被识别到C。
  2. 使用${var:LogsFilePath}引用变量时,若变量值包含冒号,需明确语法避免解析歧义。

解决方案

1. 修复默认值截断问题

在${appsetting}的default参数值外层添加单引号(无需XML转义,更简洁),让NLog将整个路径视为单一参数值:

<variables>
    <variable name="LogsFilePath" value="${appsetting:item=LogsFolderPath:default='C:\Company\Logs'}" />
</variables>

若偏好双引号,需在XML中做转义处理:

<variables>
    <variable name="LogsFilePath" value="${appsetting:item=LogsFolderPath:default=&quot;C:\Company\Logs&quot;}" />
</variables>

2. 修复${var:}变量引用问题

使用${var:name=LogsFilePath}的完整语法明确指定变量名,避免解析时因特殊字符出现异常:

<target name="File"
    xsi:type="File"
    fileName="${var:name=LogsFilePath}\${event-properties:FileName}.log" />

完整修正后的NLog.config

<variables>
    <variable name="LogsFilePath" value="${appsetting:item=LogsFolderPath:default='C:\Company\Logs'}" />
</variables>
<targets>
    <target name="File"
        xsi:type="File"
        fileName="${var:name=LogsFilePath}\${event-properties:FileName}.log" />
</targets>

<rules>
    <rule logger="DynamicLogger_*" minLevel="Trace" writeTo="File" />
</rules>

原理说明

  • 用引号包裹默认值后,NLog会将引号内的内容识别为完整参数值,不再把路径中的冒号当作参数分隔符。
  • 使用${var:name=变量名}的完整语法,能明确告知NLog要读取的变量名称,避免因变量值含特殊字符导致的解析错误。

内容的提问来源于stack exchange,提问作者JuanDYB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:11:03