NLog appsetting默认为相对路径

时间:2017-10-03 21:30:54

标签: .net logging nlog

我想在<appsetting>NLog具体)中使用the NLog.Extended NuGet package来执行以下操作:

<variable name="logDir" value="${appsetting:name=RemoteLogDir:default=.\Log}" />

我在发布应用时设置RemoteLogDir的位置,但是回退到 relative 目录以进行本地开发。我已经能够获得绝对的工作路径,但这看起来并不合作。

如何获得相对的工作路径?或者我是否需要提交功能请求?

注意:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
      autoReload="true" throwExceptions="false">

  <variable xsi:type="NLogVariable" name="appLogName" value="MyApp"/>

  <variable xsi:type="NLogVariable" name="logDir" value="${appsetting:name=RemoteLogDir:default=\.\\Log}" />
  <variable xsi:type="NLogVariable" name="layout" value="${level:uppercase=true} | ${date:format=MM/dd/yyyy HH\:mm\:ss} | ${machinename} | ${windows-identity:domain=true} | ${callsite} ${newline}    ${message}${onexception:${newline}[EXCEPTION]${newline}${exception:format=tostring}}" />

  <variable xsi:type="NLogVariable" name="logFileName" value="${var:logDir}/${var:appLogName}_${date:format=yyyy-MM-dd}.txt" />
  <variable xsi:type="NLogVariable" name="archiveLogFileName" value="${var:logDir}/Archive/${var:appLogName}_Archived_{#}.txt" />

  <targets>
    <target name="singleFile" xsi:type="File"
              layout="${var:layout}"
              fileName="${var:logFileName}"
              concurrentWrites="true"
              keepFileOpen="true"
              archiveFileName="${var:archiveLogFileName}"
              archiveEvery="Day"
              archiveNumbering="Date"
              archiveDateFormat="yyyy-MM-dd_HH"
              maxArchiveFiles="30" />
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="singleFile" />
  </rules>
</nlog>

1 个答案:

答案 0 :(得分:1)

<强> TL; DR

<variable xsi:type="NLogVariable" name="logDir" value="${whenEmpty:whenEmpty=${basedir}/Log:inner=${appsetting:name=RemoteLogDir}}" />

<强>解释

实际上,appsetting只接受默认值的字符串。但是,您可以通过不提供默认值并使用whenEmpty来模拟所需的功能。如果未设置应用程序设置,则内部值将计为空,因此将呈现whenEmpty值。