我想在<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>
答案 0 :(得分:1)
<强> TL; DR 强>
<variable xsi:type="NLogVariable" name="logDir" value="${whenEmpty:whenEmpty=${basedir}/Log:inner=${appsetting:name=RemoteLogDir}}" />
<强>解释强>
实际上,appsetting只接受默认值的字符串。但是,您可以通过不提供默认值并使用whenEmpty来模拟所需的功能。如果未设置应用程序设置,则内部值将计为空,因此将呈现whenEmpty值。