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 タグです。

<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 Diagnostics がログ ファイルを検索し、NLog によって書き込まれたファイルを LocalStorage に一致させる方法です。

LocalStorage タグで表されるフォルダーのルートを取得するには、nlog.config ファイル内の Target タグに何を入力すればよいですか?

4

1 に答える 1

1

私が提案できる方法の 1 つは (テストはしていませんが)、カスタム環境変数を使用することです。

Azure SDK を使用すると、カスタム環境変数を定義できます。その後、 XPath を使用して設定値を取得できます。

equalsで変数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 に答える