本篇文章由小弟發給公司同事的信件轉貼過來
前言:
一開始kevin希望我先研究Enterprise Library這套由微軟開發的元件,其中Exception Handling Application Block 與Logging Application Block是目前開發與應用所需要用的元件,但在考量時間與需求之後,kevin請我先把log4net導入innoInfra,至少先將exception記錄起來,在做其他的應用,所以就由小弟來跟大家分享一下log4net到底是什麼。
Log4net是一套open-source軟體元件,由知名的open-source軟體公司(The Apache Software Foundation)開發維護,其中相關log軟體包含
1. log4j for Java
2. log4cxx for C++
3. log4net for the Microsoft .NET framework
4. log4php for PHP
而我們目前使用的就是for .Net版本的log元件故稱log4net。
使用方法:
Log4net有所謂的紀錄層級,意即是可以由使用者來自行定義各種log等級,並由組態設定(log4net.config),來決定要記錄下哪些等級的資訊。
關於Log等級,請參考:
Logger等級
關於log4net.config的設定及參數,請參考:
Log4net中的log4net.Layout.PatternLayout
log4net Config Examples
使用步驟:
1. 將log4net.config加入網站或專案
2. 在組態檔(web.connfig/app.config)的appSettings區塊內加入log4netFile標記,並給定log4net.config的檔案路徑
3. 將log4net.config設定檔載入,ex:
載入log4net設定
1 void Application_Start(object sender, EventArgs e)
2 ...{
3 // 應用程式啟動時執行的程式碼
4
5 log4net.Config.XmlConfigurator.ConfigureAndWatch(
6 new System.IO.FileInfo(string.Format(@"...{0}\{1}", Server.MapPath("~"),
7 System.Configuration.ConfigurationManager.AppSettings["log4netFile"])));
8 }
4. 擷取log並寫入檔案,ex:
擷取log並寫入檔案
1 void Application_Error(object sender, EventArgs e)
2 ...{
3 // 發生未處理錯誤時執行的程式碼
4 var log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
5 var exception = HttpContext.Current.Server.GetLastError();
6 log.Error(exception.InnerException);
7
8 }
5. 觀察log:
觀察log
01 [2010-05-17 11:02:29,390][ERROR][ASP.global_asax][LINE #:27]
02
03 System.InvalidOperationException: 服務 'JAYA.EIP.BizLayer.Services.RawDataService' 沒有應用程式 (非基礎結構) 端點。這可能是因為找不到應用程式的組態檔、組態檔中找不到符合服務名稱的服務項目,或是因為服務項目中未定義任何端點。
04
05 於 System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description)
06
07 於 System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
08
09 於 System.ServiceModel.ServiceHostBase.InitializeRuntime()
10
11 於 System.ServiceModel.ServiceHostBase.OnBeginOpen()
12
13 於 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
14
15 於 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
16
17 於 System.ServiceModel.ServiceHostingEnvironment.HostingManager.ActivateService(String normalizedVirtualPath)
18
19 於 System.ServiceModel.ServiceHostingEnvironment.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath)
20
21 [2010-05-17 16:19:32,154][ERROR][ASP.global_asax][LINE #:27]