こんばんは、statemachineです。はてなを、WYSIWYGで編集できるエディタってあるんでしょうか。WordPressとかなら、WordとかLive Writerで画像貼り付けもできそうで、楽ちんそうなんですが。
さて、Azureフォーラムでも話題になっていたログの件のおさらいです。以前、Azureの小ネタでも、ココで触れています。
Blobに転送するログはすべて同じ仕組みで動作しているもようなので、IISのログもユーザーが独自に出力したログも同じような仕組みで転送されます。ようは、基点となるフォルダ配下まるごと転送されます。
以下のコードをWebRoleのOnStartで設定しておきまうす。もちろん、構成ファイルで、ローカルストレージの設定も必要です。
var dmc = DiagnosticMonitor.GetDefaultInitialConfiguration(); // 30秒単位で転送(実際はもっと長くする) dmc.Directories.ScheduledTransferPeriod = TimeSpan.FromSeconds(30); // カスタムログのコンテナをQuotaを設定 var dconfig = new DirectoryConfiguration() { Container = "user-logs", DirectoryQuotaInMB = 100, }; // LocalStorageのRootPathをログの基点フォルダとして設定 var res = RoleEnvironment.GetLocalResource("ls"); dconfig.Path = res.RootPath; // データソースに追加 dmc.Directories.DataSources.Add(dconfig); DiagnosticMonitor.Start("DiagnosticsConnectionString", dmc);
ログの出力部は、ちょっとやっつけながら、TextBoxとButtonを配置して、ログの基点となるローカルストレージにファイルを書き込むだけです。
protected void Button1_Click(object sender, EventArgs e) { var logfile = this.TextBox1.Text; var message = this.TextBox2.Text; if (string.IsNullOrEmpty(logfile)) return; try { var ls = RoleEnvironment.GetLocalResource("ls"); logfile = Path.Combine(ls.RootPath, logfile); using (var sw = new StreamWriter(logfile, true)) { sw.WriteLine("{0} : {1}", DateTime.UtcNow, message); } } catch (Exception ex) { this.Label1.Text = ex.ToString(); } } }
出力されたログをVisual Studioで覗いたところ。上は、開発ファブリックから書き込んだもの。下が、WebRoleから書き込んだもの。
出力してみると、ちゃんと値が入っています。
10/6/2010 12:30:16 PM : message a 10/6/2010 12:30:18 PM : message b 10/6/2010 12:30:21 PM : message c