3

我使用 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 标记表示的文件夹的根目录?

4

1 回答 1

1

我可以建议的一种方法(尽管从未测试过)是使用自定义环境变量。

Azure SDK 使您可以定义自定义环境变量。然后,您可以使用XPath 获取设置值

现在我想知道你是否可以定义一个等于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"> 
于 2013-05-08T14:23:43.753 回答