我使用 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 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 标记表示的文件夹的根目录?
最佳答案
我建议的一种方法(尽管从未测试过)是使用自定义环境变量。
Azure SDK 使您能够 define custom environment variables 。然后您可以使用 XPath to get setting values .
现在我想知道您是否可以定义一个变量NLogPath
,其中RoleInstanceValue
等于/RoleEnvironment/CurrentInstance/LocalResources/LocalResource[@name='LogStorage']/@路径
定义应类似于:
<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">
关于logging - 在 Azure 中配置文件日志记录以写入 LocalResources 中定义的特定 LocalStorage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16428226/