我使用web.config指向的nlog.config对NLog进行日志记录设置。在这个nlog.config文件中,我需要放置一行如下:
fileName="ApplicationLog.txt"
我希望日志条目转到此文件。
我的ServiceDefinition.csdef文件包含:
<LocalResources>
<LocalStorage name="DiagnosticStore" sizeInMB="20000" cleanOnRoleRecycle="false" />
<LocalStorage name="LogStorage" cleanOnRoleRecycle="false" sizeInMB="8192" />
</LocalResources>
我希望日志记录转到LogStorage指向的根目录的子文件夹。这在部署的Azure VM上是这样的:
C:\Resources\Directory\ec1b400c7e58640a8b874035ba9196c.Services.LogStorage\logs/ApplicationLog.txt
如果我将其硬编码到nlog.config文件中,则日志会成功写入其中。这是我在配置文件中的Target标记:
<target name="App" xsi:type="File"
lineEnding="Default" autoFlush="true" keepFileOpen="false"
fileName="ApplicationLog.txt">
当fileName设置为ApplicationLog.txt时,该文件不会出现在服务器上的任何位置。没有记录日志。
我的diagnostics.wadcfg包含魔术时期:
<DataSources>
<DirectoryConfiguration container="telemetry-logs" directoryQuotaInMB="4096">
<LocalResource name="LogStorage" relativePath=".\archive" />
</DirectoryConfiguration>
</DataSources>
这就是Azure诊断程序查找日志文件的方式,将NLog写入的文件与我的LocalStorage相匹配。
我在nlog.config文件中的Target标记中放置什么来获取LocalStorage标记所代表的文件夹的根目录?
答案 0 :(得分:1)
我可以建议的一种方法(从未测试过)是使用自定义环境变量。
Azure SDK为您提供define custom environment variables的可能性。然后,您可以使用XPath to get setting values。
现在我想知道你是否可以定义变量NLogPath
RoleInstanceValue
等于/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='LogStorage']/@path
定义应如下所示:
<Runtime>
<Environment>
<Variable name="NLogPath">
<RoleInstanceValue xpath="/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='LogStorage']/@path" />
</Variable>
</Environment>
</Runtime>
现在尝试像这样配置NLog:
<target name="App" xsi:type="File"
lineEnding="Default" autoFlush="true" keepFileOpen="false"
fileName="${environment:variable=NLogPath}\ApplicationLog.txt">