SDK 1.3 になってやり方が変わっていました。RoleInstanceDiagnosticManager を使って現在の設定を取得し、プロパティを色々変更して再び RoleInstanceDiagnosticManager にセットしないといけないみたい。
using System; using System.Linq; using Microsoft.WindowsAzure; using Microsoft.WindowsAzure.Diagnostics; using Microsoft.WindowsAzure.Diagnostics.Management; using Microsoft.WindowsAzure.ServiceRuntime; namespace Sample.WebRole { public class WebRole : RoleEntryPoint { public override bool OnStart() { ConfigureDiagnostics(); RoleEnvironment.Changed += (sender, e) => { if (e.Changes.Any(c => c is RoleEnvironmentConfigurationSettingChange)) { ConfigureDiagnostics(); } }; return base.OnStart(); } private void ConfigureDiagnostics() { // Azure Storage Services 用の接続文字列名 var cns = "Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"; // アカウント作成 var account = CloudStorageAccount.Parse( RoleEnvironment.GetConfigurationSettingValue(cns)); // ログなどの設定を管理するオブジェクト取得 var manager = account.CreateRoleInstanceDiagnosticManager( RoleEnvironment.DeploymentId, RoleEnvironment.CurrentRoleInstance.Role.Name, RoleEnvironment.CurrentRoleInstance.Id); // 現在の設定を取得 var config = manager.GetCurrentConfiguration(); // イベントログの設定と転送 config.WindowsEventLog.DataSources.Add("Application!*"); config.WindowsEventLog.DataSources.Add("System!*"); config.WindowsEventLog.ScheduledTransferLogLevelFilter = LogLevel.Verbose; config.WindowsEventLog.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); // 診断ログの設定と転送 config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Verbose; config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); // IIS ログの転送 config.Directories.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); // Windows Azure ログの設定と転送 config.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose; config.Logs.ScheduledTransferPeriod = TimeSpan.FromMinutes(1); // 設定を更新 manager.SetCurrentConfiguration(config); } } }
あと、海外のサンプル見ると FromConfigurationSetting ではなく Parse を使って CloudStorageAccont を生成しているのが多いですね。FromConfigurationSetting だと事前に SetConfigurationSettingPublisher を呼び出して準備が必要なのに対し、Parse の方はそれが不要だからでしょうか。
正直「FromConfigurationSetting も Parse 同様に準備無しで使えるようになればいいのに」って、エラーが出るたびに思います。