DiagnosticMonitorTraceListenerを一般的なトレースリスナー(主にASP.NET Health Monitoring用)として使用しているほか、例外処理用のEnterpriseLibrary5リスナーとして使用しています。これはAzureで実行する場合はうまく機能しますが、最小限の変更でAzureの外部でWebサイトを実行できることが重要です。
1つのオプションは、次のように動的に登録することです。
protected void Application_Start()
{
if (Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable)
{
System.Diagnostics.Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener());
System.Diagnostics.Trace.AutoFlush = true;
}
}
これは、ASP.NET Health MonitoringおよびSystem.Diagnosicsの一般的な使用では機能しますが、次のハードコードされた構成があるEnterpriseLibraryでは機能しません。
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Event Log Listener" />
<add name="Azure Diagnostics Trace Listener" />
</listeners>
</add>
</categorySources>
アドレス指定しないままにすると、ExceptionPolicy.HandleExceptionを呼び出すと次のものが生成されます。
ホストされたサービスまたは開発ファブリックで実行されていません。
アプリの実行場所に基づいてこれを条件付きで削除するには、EL5用の流暢な構成APIを使用できますが、構成を書き直す必要があります(すべてまたはまったくありません)。
web.config変換を使用することもできますが、3つの異なるソリューション構成(開発、ステージング、本番など)に加えて、dev-standaloneとdev-azureを区別するために4番目を導入する必要があります。
最後のオプションは、すべてのメッセージを** **(Azureで実行している場合)にルーティングするか、何もしないカスタムリスナーを作成することです。
他に何か提案はありますか?
参考までに、ASP.NETヘルスモニタリングは次のように構成されています。
<healthMonitoring enabled="true">
<providers>
<add name="TraceWebProvider" type="System.Web.Management.TraceWebEventProvider" />
</providers>
<rules>
<add name="Application Events"
eventName="Application Lifetime Events"
provider="TraceWebProvider"
profile="Default"
minInstances="1"
maxLimit="Infinite"
minInterval="00:01:00" />
</rules>
</healthMonitoring>