本文是Windows Azure入門教學的第九篇文章。
本文将會介紹如何使用Windows Azure 診斷功能。跟部署在本地伺服器上的程式不同,當我們的程式釋出到雲端之後,我們不能使用通常的調試方法,例如Remote Debugging等等來對我們的程式進行調試。那麼當程式運作出現問題時我們如何能夠得知問題的根源以便修正Bug呢?如果我要檢測程式的性能,又有什麼好的方法呢?
要做到上述的需求,我們需要利用Windows Azure提供的診斷功能,該功能能夠記錄診斷日志,儲存到Windows Azure Storage上。如果要檢測程式的性能可以使用性能計數器。該例子不在本文範圍内。本文将引導讀者建立一個簡單的Windows Azure Web Role, 在頁面加載時記錄一段資訊,并從Table Storage中觀察收集到的資訊。
步驟一:建立解決方案和項目
啟動Visual Studio 2010,建立一個Cloud Service項目并為之添加一個Web Role。
步驟二:添加代碼
在Default.aspx.cs中添加下列代碼:
1
2
3
4
5
6
7
<code>protected void Page_Load(object sender, EventArgs e)</code>
<code>{</code>
<code> </code><code>System.Diagnostics.Trace.WriteLine("Page_Load is called", "Information");</code>
<code>}</code>
在WebRole.cs中添加下列代碼:
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<code>public override bool OnStart()</code>
<code> </code><code>// 擷取用于Windows Azure診斷的預設初始配置</code>
<code> </code><code>DiagnosticMonitorConfiguration diagConfig = DiagnosticMonitor.GetDefaultInitialConfiguration();</code>
<code> </code><code>diagConfig.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;</code>
<code> </code>
<code> </code><code>// 制定預定傳輸間隔</code>
<code> </code><code>diagConfig.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1);</code>
<code> </code><code>DiagnosticMonitor.Start("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString", diagConfig);</code>
<code> </code><code>// For information on handling configuration changes</code>
<code> </code><code>return base.OnStart();</code>
步驟三:觀察并分析代碼
我們需要關心的代碼主要有:
· diagConfig.Logs.ScheduledTransferLogLevelFilter = LogLevel.Verbose;
該代碼設定了日志過濾級别。有些情況下我們隻關心嚴重的錯誤,這時候我們可以設定過濾級别為LogLevel.Error或者LogLevel.Critical。這樣隻有符合條件的日志才會被傳輸到cloud storage上。
· diagConfig.Logs.ScheduledTransferPeriod = System.TimeSpan.FromMinutes(1);
另外需要指出的是,要收集跟蹤資訊我們需要在Web.config中添加:
<code><</code><code>system.diagnostics</code><code>></code>
<code><</code><code>trace</code><code>></code>
<code> </code><code><</code><code>listeners</code><code>></code>
<code> </code><code><</code><code>add</code> <code>type</code><code>=</code><code>"Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"</code> <code>name</code><code>=</code><code>"AzureDiagnostics"</code><code>></code>
<code> </code><code><</code><code>filter</code> <code>type</code><code>=</code><code>""</code> <code>/></code>
<code> </code><code></</code><code>add</code><code>></code>
<code> </code><code></</code><code>listeners</code><code>></code>
<code></</code><code>trace</code><code>></code>
<code></</code><code>system.diagnostics</code><code>></code>
上面的配置預設的模闆已經幫助我們添加了。我們可以觀察Web.Config來确認。
步驟四:運作程式
按F5運作程式。頁面彈出。這時候代碼應該已經執行了。過兩分鐘左右使用Visual Studio中的Server Explorer視窗,我們可以在Development Storage的WADLogsTable中看到一條記錄:

我們可以看到我們在代碼中添加的跟蹤資訊已經被記錄到Table Storage中了。實際應用中我們可以通過try-catch來捕獲異常,并且添加錯誤日志。這些日志能夠被傳送到cloud storage中以便分析問題。
除了一般的日志以外,Windows Azure還提供了其他診斷方式,比如Crash Dump、Windows Event Log、性能計數器等等。