在Azure中配置文件日志记录以写入本地资源中定义的特定本地存储

时间:2013-05-07 20:44:07

标签: logging azure nlog

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

1 个答案:

答案 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">