簡體   English   中英

將log4net與asp.net Web表單結合使用

[英]Using log4net with asp.net web forms

我正在嘗試將log4net合並到我的Web應用程序中。 我已經使用基於.net mvc的新部分完成了這項工作,但是我很難將其合並到我的應用程序的基於Web表單的部分中。 我環顧四周尋找一個例子並沒有遇到過一個例子。

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

(1)我考慮將實際調用log4net放在“Global.asax”文件中,並將其放在我的基頁(構建所有其他頁面)上。 我應該將實際代碼放在這些地方中的哪一個,如果不是,我應該把代碼放在哪里?

(2)我對代碼的理解是我需要實例化一個日志,然后在我想要的時候記錄日志(日志的細節由web.config處理),但我不知道該代碼應該是什么樣子。 那么,我應該在我的文件中放置什么代碼? (例如,將不勝感激)

謝謝

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

發起我只需在我需要的每個頁面中使用此行...

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,應用程序總是重新啟動,據我所知。

要完成此任務,您只需要在web.config中添加以下內容即可

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

而不是在web.config中的某處添加此行

<log4net configSource="log.config"/>

然后文件“log.config”配置了所有偵聽器。 但不要忘記將文件復制到您的生產/測試環境。 否則你可能會得到奇怪的錯誤信息。

心連心

將它放在基頁中聽起來是個好主意,然后在使用GetLogger進行實例化時,您可以傳入您正在登錄的頁面(盡可能具體地說明日志調用的來源真的有助於調試)。 在實例化之后你還需要調用.Configure,這總是讓我感到厭煩(需要為此導入Log4Net.Configure)

將監聽器配置放在web.config中並通過LevelRangeFilter定義最小/最大級別(DEBUG最低,FATAL最高)。

用法非常簡單 - 您只需使用所需級別進行日志記錄,EG:log.Info,log.InfoFormat,log.Error,log.ErrorFormat(格式就像String.Format一樣) - 低於最低配置日志級別的任何內容都將是被忽略,因此您可以根據需要添加盡可能多的登錄。

你也檢查過艾瑪嗎? 這允許您跟蹤未處理的異常。 http://code.google.com/p/elmah/

讓我分享一下使用記錄器的經驗。 通常我會將它與IOC容器一起使用,即Windsor。 因此我在Global.asax文件中初始化logger,因為每個應用程序運行一次,並且所有請求都是berore。 這是初始化記錄器的適當位置。 至於你應該調用日志的地方,沒有任何建議。 你應該在你需要的地方打電話。 如果您基於頁面生命周期記錄某些事件,當然您應該在文件后面的頁面代碼中使用logger。 但是,如果要跟蹤組件,最好在單獨的庫中提取邏輯並在其中使用記錄器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM