上記の質問に直接答えるには:
<ProgramEntryPoint commandLine="run.bat >> app.log 2>&1" ... "/>
コンピューティングエミュレーターで上記のコマンドを実行すると、コマンドシェルの出力をrun.batが配置されているのと同じ場所にリダイレクトするように求められます。それでおしまい。コンピューティングエミュレーターでワーカーロールを起動すると、CSXフォルダー内の場所から開始され、そこにapp.logが作成されます。
これで、まったく同じコードを取得してWindows Azureにデプロイすると、「run.bat >> app.log」が実行されると、app.logファイルがrun.batと同じ場所に直接作成されます。これは、AzureインスタンスのRDPの後のE:\Approot\にあります。
上記の方法は正しいですが、戦略は正しくありません。それの訳は:
- ログはAzureVMに保持されませんAzureVMはリサイクルされます
- 確認するには、Azure VMにRDPする必要があります(100個のインスタンスがある場合、ログを取得するために各インスタンスにRDPしますか?)
最善の戦略は、サードパーティのアプリケーションによって作成されたこれらのカスタムログをAzureStorageに直接転送することです。
java.exe、php.exe、pythonなどのカスタムアプリケーションがあるシナリオでは、「ローカルストレージ」フォルダーに直接ログファイルを作成し、ワーカーロール(WorkerRole.cs)でAzure Diagnosticsを初期化して、これらをエクスポートすることをお勧めします。カスタムログファイルをAzureVMからAzureBlobストレージに直接送信します。
ローカルストレージにカスタムログを作成する方法は、ここで説明されています