NLog配置中appsetting默认路径冒号引发异常的解决方法
解决NLog配置中默认路径冒号截断及变量引用问题
问题根源
${appsetting}渲染器以冒号(:)作为参数分隔符,默认值里的C:\冒号会被误判为参数分隔标记,导致默认值仅被识别到C。- 使用
${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="C:\Company\Logs"}" /> </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
相关产品推荐
相关产品推荐

