程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> Effective C#原則36:利用.Net運行時診斷(2)

Effective C#原則36:利用.Net運行時診斷(2)

編輯:關於C語言

TextWriterTraceListener把所 有的診斷信息到打印到一個MyListener.log文件中。名字屬性指定了監聽者的名 字,類型指定了作者監聽對象的類型,它必須是從 System.Diagnostics.TraceListener派生下來的。只有在極少數情況下你才創建 自己的監聽類,那就是你覺得.Net框架的監聽類不夠用。initializeData的值是 一個字符串,用於傳給對象的構造函數。而TextWriterTraceListeners把它用於 文件名。

你可以小做一個擴展,讓它可以在應用中每個部署的程序集上 都可以簡單的使用。對於每個程序集,添加一個類來跟蹤程序集創建的診斷:

internal class MyAssemblyDiagnostics
{
 static private TraceSwitch myAssemblySwitch =
  new TraceSwitch( "MyAssembly",
  "The switch for this assembly" );
 internal static void Msg( TraceLevel l, object o )
 {
  Trace.WriteLineIf( myAssemblySwitch.Level >= l,
   o, "MyAssembly" );
 }
  internal static void Msg( TraceLevel l, string s )
 {
   Trace.WriteLineIf( myAssemblySwitch.Level >= l,
   s, "MyAssembly" );
 }
 // Add additional output methods to suit.
}

MyAssemblyDiagnostices類根據一個 開關來為這個程序集創建診斷信息。為了創建信息,調用按常規調用重載的Msg 的任何一個就行了:

public void Method1( )
{
  MyAssemblyDiagnostics.Msg( TraceLevel.Info,
  "Entering Method1." );
 bool rVal = DoMoreWork( );
 if( rVal == false )
 {
  MyAssemblyDiagnostics.Msg( TraceLevel.Warning,
   "DoMoreWork Failed in Method1" );
 }
 MyAssemblyDiagnostics.Msg( TraceLevel.Info,
  "Exiting Method1." );
}

利用一個全局的開關,你還可以組件特殊的程序集開關,來控制 整個應用程序的輸出:

internal static void Msg( TraceLevel l, object o )
{
 Trace.WriteLineIf ( librarySwitch.Level >= l ||
  globalSwitch.Level >= l,
  o, "MyLibrary" );
}
internal static void Msg( TraceLevel l, string s )
{
 Trace.WriteLineIf( librarySwitch.Level >= l ||
  globalSwitch.Level >= l,
  s, "MyLibrary" );
}

這樣,你就可以在 應用程序上診斷信息,而且更友好的控制個別庫文件的輸出。在應用程序的任何 地方,你都可以設置應用程序級的診斷到錯誤級,從而發現錯誤。當你有一個獨 立的問題時,你可以通過提高這個庫的輸出級別,從而精確的發現問題的源頭。

在實際環境中,對於已經布署的應用程序,診斷庫對於程序診斷和維護 是必須的。但你自己不必寫這些診斷庫:.Net FCL已經完成了核心的功能。盡可 能完全的使用它們,然後在滿足特殊要求時擴展它們。這樣,即使是在產品發布 的環境中也可以捕獲所有的問題。

返回教程目錄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved