Enterprise Library 2.0 Hands On Lab 翻譯(4):日志應用程序塊(一)
練習1:添加日志記錄到應用程序中
該練習將示范如何向已有的應用程序中添加日志和監測(Trace姑且這么翻譯吧,不太準確),并通過Enterprise Library Configuration工具來配置TraceListeners。
第一步
打開EnoughPI.sln項目,默認的安裝路徑應該為C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Logging\exercises\ex01\begin,并編譯。
第二步 關于練習應用程序
選擇Debug | Start Without Debugging菜單命令并運行應用程序,EnoughPI程序用來計算∏的精度。在NumericUpDown控件中輸入你希望的精度并點擊Calculate按鈕。

第三步 添加日志
1.選擇EnoughPI項目,選擇Project | Add Reference …菜單命令,在打開的對話框中選擇Browse,并添加如下程序集。

Microsoft.Practices.EnterpriseLibrary.Logging.dll;
默認的位置應該是C:\Program Files\Microsoft Enterprise Library January 2006\bin。
2.在解決方案管理器中選擇Calc\Calculator.cs文件,選擇View | Code菜單命令,并添加如下命名空間。
using Microsoft.Practices.EnterpriseLibrary.Logging;3.記錄計算完成時的信息在Calculator.cs文件的OnCalculated方法中添加如下代碼。
protected void OnCalculated(CalculatedEventArgs args)
{
// TODO: Log final result
LogEntry log = new LogEntry();
log.Message = string.Format("Calculated PI to {0} digits", args.Digits);
log.Categories.Add(Category.General);
log.Priority = Priority.Normal;

Logger.Write(log);

if (Calculated != null)
Calculated(this, args);
}創建了一個新的日志項LogEntry并設置參數,使用Logger類的靜態方法Write()記錄到一個或多個TraceListener。注意這里沒有使用硬編碼而使用常量的Category和Priority,在EnoughPI.Logging的Constants.cs中作了如下定義:
public struct Priority
{
public const int Lowest = 0;
public const int Low = 1;
public const int Normal = 2;
public const int High = 3;
public const int Highest = 4;
}
public struct Category
{
public const string General = "General";
public const string Trace = "Trace";
}4.記錄計算過程的信息在OnCalculated方法中添加如下代碼。
protected void OnCalculating(CalculatingEventArgs args)
{
// TODO: Log progress
Logger.Write(
string.Format("Calculating next 9 digits from {0}", args.StartingAt),
Category.General,
Priority.Low
);

if (Calculating != null)
Calculating(this, args);

if (args.Cancel == true)
{
// TODO: Log cancellation
Logger.Write("Calculation cancelled by user!",
Category.General, Priority.High);
}
}注意這里使用Logger類的重載Write方法來快捷的創建了一個日志項LogEntry。
5.記錄計算過程的異常信息,添加如下代碼到OnCalculatorException方法中。
protected void OnCalculatorException(CalculatorExceptionEventArgs args)
{
// TODO: Log exception
if (!(args.Exception is ConfigurationErrorsException))
{
Logger.Write(args.Exception, Category.General, Priority.High);
}
if (CalculatorException != null)
CalculatorException(this, args);
}注意這里必須測試異常不能是ConfigurationErrorsException,否則你將無法使用日志記錄。對于異常信息的處理通常將會創建一個Enterprise Library 異常應用程序塊來處理異常,這在后面的練習中將會看到。
第四步 使用企業庫配置工具
1.使用Enterprise Library配置工具配置應用程序,可以通過開始菜單打開該配置工具,選擇所有程序| Microsoft patterns and practices | Enterprise Library | Enterprise Library Configuration,并打開App.config文件。或者直接在Visual Studio中使用該工具打開配置文件。
2.在解決方案管理器中選中App.config文件,在View菜單或者在右鍵菜單中選擇Open With…,將打開OpenWith對話框,單擊Add按鈕。

3.在Add Program對話框中,設置Program name指向EntLibConfig.exe文件,默認的路徑為C:\Program Files\Microsoft Enterprise Library January 2006\bin,設置Friendly name為Enterprise Library Configuration,單擊OK按鈕。

Visual Studio會把配置文件(App.config)作為一個命令行參數傳遞給EntLibConfig.exe。
4.在Open With對話框中,選中Enterprise Library Configuration并單擊OK按鈕。

第五步 配置應用程序
1.在應用程序上右擊并選擇New | Logging Application Block

2.默認的日志應用程序塊定義了一個名為General的Category,Categories是一組簡單的文本標簽,你可以提交日志信息到一組這樣的Category。General類別有一個名為Formatted EventLog TraceListener的TraceListener。要添加一個新的Category,在Category Sources上右擊,選擇New | Category。一個Category可以有多個TraceListener,而一個TraceListener也可以被多個Category所引用。

注意Category其實是日志信息的一種邏輯分類,可以把要記錄的日志信息分為界面日志,異常日志,數據訪問日志等,至于具體記錄到什么位置,則是由TraceListener來決定的。
3.選擇Logging Application Block | Trace Listeners | Formatted EventLog TraceListener節點,設置Source屬性為EnoughPI。

注意該TraceListener將使用Text Formatter來格式化日志信息,并且記錄日志信息到Windows Event Log中。
4.選擇菜單File | Save All保存應用程序的配置,并關閉Enterprise Library Configuration工具。
第六步 運行應用程序
1.選擇Debug | Start Without Debugging菜單命令并運行應用程序,在NumericUpDown控件中輸入精度并點擊Calculate按鈕。
2.打開事件查看器。通過開始 | 管理工具 | 時間查看器,查看應用程序記錄的日志信息。

3.雙擊一條日志項查看詳細的信息。

4.退出應用程序
第七步 添加監測(Tracing)
1.我們經常需要監測應用程序在一個時間區的情況,日志應用程序塊為我們提供了Tracing的功能。
2.在解決方案管理器中選擇Calc\Calculator.cs文件,選擇View | Code菜單命令,在方法Calculate中添加如下代碼。
public string Calculate(int digits)
{
StringBuilder pi = new StringBuilder("3", digits + 2);
string result = null;
try
{
if (digits > 0)
{
// TODO: Add Tracing around the calculation
using (new Tracer(Category.Trace))
{
pi.Append(".");
for (int i = 0; i < digits; i += 9)
{
CalculatingEventArgs args;
args = new CalculatingEventArgs(pi.ToString(), i + 1);
OnCalculating(args);
// Break out if cancelled
if (args.Cancel == true) break;

// Calculate next 9 digits
int nineDigits = NineDigitsOfPi.StartingAt(i + 1);
int digitCount = Math.Min(digits - i, 9);
string ds = string.Format("{0:D9}", nineDigits);
pi.Append(ds.Substring(0, digitCount));
}
}
}
result = pi.ToString();
// Tell the world I've finished!
OnCalculated(new CalculatedEventArgs(result));
}
catch (Exception ex)
{
// Tell the world I've crashed!
OnCalculatorException(new CalculatorExceptionEventArgs(ex));
}
return result;
}
3.在解決方案管理器中選擇App.config,選擇View | Open With…菜單命令,選擇Enterprise Library Configuration并單擊OK按鈕。
4.選擇Logging Application Block節點,設置TracingEnabled屬性為True。

5.添加新的TraceListener,選中Logging Application Block | Trace Listeners節點,并選擇Action | New | FlatFile TraceListener菜單命令。
6.設置Formatter屬性為Text Formatter。

7.添加新的監測類別。選中Logging Application Block | Category Sources節點,并選擇Action | New | Category菜單命令。

8.設置Name屬性為Trace,SourceLevels屬性為ActivityTracing。

這里的類別名Trace將會在代碼中使用,設置ActivityTracing級別只會在日志項開始和結束的時候記錄監測日志信息。
9.右擊新的類別Trace,并選擇New | Trace Listener Reference,設置ReferencedTraceListener屬性為FlatFile TraceListener。

10.選擇菜單File | Save All保存應用程序的配置,并關閉Enterprise Library Configuration工具。
11.選擇Debug | Start Without Debugging菜單命令并運行應用程序,在NumericUpDown控件中輸入精度并點擊Calculate按鈕。
12.現在可以在文件trace.log中看到監測日志信息。
----------------------------------------
Timestamp: 13/12/2005 6:08:01 AM
Message: Start Trace: Activity '8c07ce3b-235b-4a51-bdcc-83a5997c989e' in method 'Calculate' at 71661842482 ticks
Category: Trace
Priority: 5
EventId: 1
Severity: Start
Title:TracerEnter
Machine: TAGGERT
Application Domain: EnoughPI.exe
Process Id: 6016
Process Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe
Win32 Thread Id: 6092
Thread Name: 
Extended Properties: 
----------------------------------------
----------------------------------------
Timestamp: 13/12/2005 6:08:01 AM
Message: End Trace: Activity '8c07ce3b-235b-4a51-bdcc-83a5997c989e' in method 'Calculate' at 71662624219 ticks (elapsed time: 0.218 seconds)
Category: Trace
Priority: 5
EventId: 1
Severity: Stop
Title:TracerExit
Machine: TAGGERT
Application Domain: EnoughPI.exe
Process Id: 6016
Process Name: C:\Program Files\Microsoft Enterprise Library\labs\cs\Logging\exercises\ex01\begin\EnoughPI\bin\Debug\EnoughPI.exe
Win32 Thread Id: 6092
Thread Name: 
Extended Properties: 
----------------------------------------13.關閉應用程序和Visual Studio。
完成后的解決方案代碼如C:\Program Files\Microsoft Enterprise Library January 2006\labs\cs\Logging\exercises\ex01\end所示。
更多Enterprise Library的文章請參考《Enterprise Library系列文章》
Worktile,新一代簡單好用、體驗極致的團隊協同、項目管理工具,讓你和你的團隊隨時隨地一起工作。完全免費,現在就去了解一下吧。
https://worktile.com



浙公網安備 33010602011771號