Microsoft.Practices.EnterpriseLibrary.Logging的使用


翻譯

原文地址:http://www.devx.com/dotnet/Article/36184/0/page/1 
原文作者:Thiru Thangarathinam (好強大的名字)
翻譯: flanker

簡介

日志程序塊提供了靈活的可擴展的日志機制,你可以在任何類型的.NET程序中使用它——包括WinForms、ASP.NET、控制台程序等。它提供一些可重用的日志類(也稱為監控器),可以把日志信息記錄在多種載體上,包括數據庫、XML文件、普通文件、事件記錄等。

作為開發者,你僅需選擇一個監控器並且在應用程序配置文件中指明它,就可以在程序中調用基本的日志功能了。

安裝完Enterprise Library 3.1后,你可以在<你的目錄>/Microsoft Enterprise Library 3.1-May 2007/Bin文件夾中看到一些程序集。

使用基本的日志功能,你需要添加對Microsoft.Practices.EnterpriseLibrary.Common.dll和 Microsoft.Practices.EnterpriseLibrary.Logging.dll的引用。如果打算把信息記錄在數據庫中,那還需要 添加對Microsoft.Practices.EnterpriseLibrary.Data.dll的引用。圖片一表示了日志程序塊的依賴關系。

日志程序塊的依賴關系
圖片一 日志程序塊的依賴關系。

建立一個簡單示例

這是一個簡單示例,演示了如何配置日志程序塊來把日志保存到事件記錄中。首先建立一個C# Windows應用程序,命名為LoggingBlockExample,如上面所說地添加程序集引用。

然后,導入如下的日志命名空間:

using Microsoft.Practices.EnterpriseLibrary.Logging;

接下來,在應用程序配置文件(app.config)中添加配置選項,來指明日志將保存在事件記錄中(見列表1)。所有配置都在<loggingConfiguration> 節點中,如下四個:

listeners —— 指明監控器,來記錄日志。
formatters —— 可選元素,用來指明日志的格式。
categorySources —— 負責建立特定的日志分類和監控器的對應關系。注意,必須要給<loggingConfiguration>元素的defaultCategory屬性指明一個categorySources。
specialSources —— 指明特殊的監控對象來處理特殊的日志條目。

搞定app.config后,下一步就是用日志程序塊來寫代碼了。首先,在Windows窗體添加一個叫做btnLogMessage的按鈕,對按鈕添加Click事件處理如下:

   private void btnLogMessage_Click(object sender, EventArgs e)
   {
     //建立一個LogEntry對象,並設置它的屬性
     LogEntry entry = new LogEntry();
     entry.EventId = 1;
     entry.Priority = 1;
     entry.Message = "This is a test message";
     entry.Categories.Clear();
     //注意默認的分類是General
     entry.Categories.Add("General");
     Logger.Write(entry);
     MessageBox.Show("Log is written");
   }

上面的代碼使用了兩個日志類:LogEntry和Logger。LogEntry表示一個日志條目,所以它提供一些屬性——優先級、事件ID、日志消息等。Logger提供類方法來把日志消息寫入在配置文件中指明的一個或者多個監控器里。

所以,要寫一個日志消息,你應該建立一個LogEntry對象並對其屬性賦值。LogEntry對象可以添加一個或者多個分類,以便讓適合的監控器記錄。

圖片二表示了在示例程序中點擊“記錄日志”按鈕后,日志消息被保存在事件記錄中。

事件記錄
圖片二 事件記錄:通過Windows事件查看器的應用程序分類來查看紀錄的日志消息。

使用Enterprise Library配置工具

雖然可以手工的修改app.config文件,但是使用Enterprise Library自帶的配置工具將會更加簡單。

打開Enterprise Library配置工具,建立一個新的應用程序,在Application Configuration上右擊選擇New → Logging Application Block。(見圖片三)

配置工具
圖片三:Enterprise Library配置工具:這個工具使用一個向導來配置日志。

日志程序塊的配置包含四個元素:Category Sources、Special Sources、Trace Listeners、和Formatters。默認情況下,配置工具建立一個使用Text Formatter作為默認格式的Formatted EventLog TraceListener監控器,並在Category Sources中已經添加了它。

下面講如何通過配置工具來設置一個XML文件日志。首先要建立一個XML監控器,右擊Trace Listeners節點選擇New → XML Trace Listener,建立了監控器后,把右邊面板的name屬性改為C:/Temp/Trace.xml。

下一步是引用新的監控器,右擊All Events節點選擇New → Trace Listener Reference。添加監控器引用后,把右邊面板的ReferencedTraceListener屬性改為XML Trace Listener。當你完成這些時,結果應該和圖片四類似。

配置工具
圖片四 把日志導向XML監控器:通過在All Events中引用XML監控器,你可以把日志的任何事件保存在XML文件中。

把配置工具的設置保存為app.config。現在你在C#示例項目中使用新生成的app.config,日志數據將會記錄在XML日志文件中。(見圖片五)

XML日志
圖片五 XML日志:這是一個日志記錄的XML文件。注意這里有兩個主要節點(System和ApplicationData)分別保存系統屬性和日志。

使用數據庫作為日志存儲

你已經知道了如何在事件記錄和XML文件中寫日志了,這適合大多數的簡單應用,但對更復雜的應用程序,你也許想把日志記錄在一個穩定的存儲中比如 SQL Server數據庫。日志在數據庫中也可以更方便的查詢。日志程序塊提供一個數據庫監控器,可以實現紀錄日志到數據庫中。

要使用數據庫日志,你首先要執行一段SQL腳本(由Enterprise Library提供)來建立數據庫。運行<你的目錄>/EntLib3Src/AppBlocks/Src/Logging /TraceListeners/Database/Scripts文件夾中的LoggingDatabase.sql文件,它會在你的SQL Server中建立一個名為Logging的數據庫。

現在,需要修改app.config文件來使用數據庫監控器。你也要指明數據庫連接字符串。代碼中的Database App.config文件是一個完整的配置文件。

原文作者注:在使用app.config文件前,確保你已經把Database App.config文件里的<connectionStrings>元素連接字符串改為匹配你自己的數據庫。

接下來,打開之前的WinForms應用程序,替換app.config文件,再次運行程序。這次點擊按鈕后,你就可以在Logging數據庫的Log表里查看到日志條目了。

實現自定義的監控器

如果內置的監控器不能滿足你的要求,日志程序塊允許你來實現自定義的監控器,自定義監控器繼承自CustomTraceListener類。但這些已經超出這篇文章的范圍,你可以在這篇MSDN文章上獲取更多信息。

你已經了解如何使用日志程序塊來讓你在.NET程序中建立靈活易於維護的日志系統。使用配置文件和簡單代碼在文件、事件記錄和數據庫中記錄日志。當 然,配置文件是有一點兒煩人,但這總比寫重復的代碼甚至為了轉換存儲而必須要改變代碼要來的好。而且,Enterprise Library配置工具將會通過向導來簡化配置工作。現在,你可以在你的應用程序中添加很棒的日志了。

關於作者

Thiru Thangarathinam 在亞利桑那州Intel公司工作。他是微軟的MVP,擅長使用.NET相關技術來構架、設計和開發分布式企業級應用。他是《Professional ASP.NET 2.0 XML》和《Professional ASP.NET 2.0 Databases》的作者,並且參與寫作了一系列的.NET相關技術的書籍。他也是一個在線技術出版物的積極貢獻者。Email聯系


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM