2012-08-01 28 views
4

我想將log4net合併到我的web應用程序中。我已經用基於.net mvc的較新部分完成了這項工作,但是我很難將它整合到我的應用程序的基於Web表單的部分。我四處尋找一個例子,並沒有遇到過。使用log4net與asp.net web表單

爲了縮小我的問題,讓我們假設我知道如何配置我的web.config文件。我的問題是:

(1)我已經考慮將實際調用log4net放在一個「Global.asax」文件中,並將其放入我的基頁(所有其他頁面都在其上構建)。我應該將實際的代碼放在這些地方嗎?如果沒有,我應該在哪裏放置代碼? (2)我對代碼的理解是,我需要實例化一個日誌,然後在需要時記錄日誌(日誌的具體細節由web.config處理),但是我不知道該代碼實際應該是什麼樣子。那麼,我應該將哪些代碼放入我的文件中? (例如,將不勝感激)

感謝

+0

除此之外,退房ELMAH以及它可能對你http://code.google.com/p/elmah/ – Adil 2012-08-01 15:19:44

+0

您好我看起來很簡單的方法來記錄日誌與log4net的有用,所以希望這對你有用,請遵循URL [如何在ASP.NET Web窗體(簡單方法)中使用Nuget中的Log4net與Visual Studio平臺](http://stackoverflow.com/questions/42569713/how - 使用-log4net從nuget-with-visual-studio-platform-in-the-asp-net-web-for/42572770) – 2017-03-03 07:28:57

回答

6

只需將代碼放在需要它的地方。

啓動我只是使用在每一頁我需要它,這條線......

static Logger log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

所以記錄器獲取當前類,包括完整的命名空間的名稱。 我還使用記錄器中的Global.asax例如錯誤日誌記錄

protected void Application_Error(object sender, EventArgs e) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("Unhandled error occured in application. Sender: "); 
     sb.AppendLine(Request.RawUrl); 
     sb.Append("Query: "); 
     sb.AppendLine(Request.QueryString.ToString()); 

     Exception ex = Server.GetLastError().GetBaseException(); 

     log.Error(sb.ToString(), ex); 
     Server.ClearError(); 

     Response.Redirect("~/Error.aspx"); 
    } 

,但我單獨從web.config日誌配置。這對我來說更容易,而且您不必處理如此大的文件。當我更改日誌配置文件時,我也認爲應用程序不是重新啓動。如果你更新web.config,應用程序總是重新啓動,據我所知。

做到這一點,你只需要按照加

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

添加到Web.config 比在web.config

<log4net configSource="log.config"/> 

某處添加此行,然後將文件「 log.config「配置了所有的監聽器。但不要忘記將文件複製到您的生產/測試環境。否則您可能會收到奇怪的錯誤消息。

心連心

+0

感謝nWorx,這就是我一直在尋找的。但是,GLobal.asax文件中的代碼如何由錯誤觸發? – crawfish 2012-08-01 15:33:25

+0

只需檢查http://msdn.microsoft.com/en-us/library/24395wz3.aspx – nWorx 2012-08-01 16:13:17

+0

你知道如何正確地在global.asax文件中實例化記錄器嗎? – crawfish 2012-08-01 17:51:50

1

將其放置在基本頁面聽起來像一個好主意,然後使用GetLogger實例化時,你可以在你的日誌記錄(即儘可能具體有關頁面傳你的日誌調用來自真正的幫助調試)。在實例化哪些東西總是將我引出(需要爲此導入Log4Net.Configure)之後,您還需要調用.Configure

將您的監聽器配置放在web.config中,並通過LevelRangeFilter定義最小/最大級別DEBUG最低,FATAL最高)。使用非常簡單 - 您只需登錄所需級別EG:log.Info,log.InfoFormat,log.Error,log.ErrorFormat(這些格式就像String.Format一樣工作) - 低於最低配置日誌級別將被忽略,因此您可以儘可能多地登錄。

您是否還檢出了Elmah?這使您可以跟蹤未處理的異常。 http://code.google.com/p/elmah/

0

讓我分享我使用記錄器的經驗。通常我將它用於IOC容器,即溫莎。 因此,我在Global.asax文件中創建了記錄器的初始化,因爲它是針對每個應用運行的一次,以及所有的請求。這是初始化記錄器的適當位置。 至於你應該打電話給日誌的地方,沒有任何建議。你應該打電話到你需要的地方。 如果你正在記錄一些基於頁面生命週期的事件,當然你應該在頁面代碼後面使用記錄器。但是如果你想跟蹤你的組件,最好在單獨的庫中提取邏輯並在其中使用記錄器。