2013-08-27 65 views
2

Mine是一個Asp.net MVC 4應用程序。我需要實施以下內容; 按日誌級別中的web.config文件中設置使用log4net登錄Asp.net MVC應用程序

我需要登錄(如1/2/3/4):

1:

  • 方法開始
  • 方法結束
  • 應用警告

應用程序異常

2:

  • 應用警告
  • 應用例外

3:

  • 應用例外

4:

而且我需要做到這一點使用全局過濾器(一個或多個)。

請給我一些指點。

在此先感謝。


解決

以下是我的步驟

我創建了下面的過濾器類

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
    public class LoggerFilterAttribute : ActionFilterAttribute 
    { 
     private ILog _objLog4Net = null; 
     string logLevel = string.Empty; 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString()); 
      logLevel = GetLogLevel(); 
      if (logLevel == "1") 
      { 
       _objLog4Net.Debug(string.Concat("Entered ", filterContext.Controller.GetType().ToString(), "'s ", filterContext.ActionDescriptor.ActionName, " method")); 
      } 
     } 

     public override void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString()); 
      logLevel = GetLogLevel(); 
      if (logLevel == "1") 
      { 
       _objLog4Net.Debug(string.Concat("Existing ", filterContext.Controller.GetType().ToString(), "'s ", filterContext.ActionDescriptor.ActionName, " method")); 
      } 
     } 

     private string GetLogLevel() 
     { 
      return ConfigurationManager.AppSettings["LOGLEVEL"].ToLower().ToString(); 
     } 

    } 

若發現1通過 OnActionExecuting這個類在配置文件檢查日誌等級() 和OnActionExecuted() 將記錄方法開始和方法結束。

再往後是用於記錄異常

public class ExceptionFilterAttribute : HandleErrorAttribute 
{ 
    private ILog _objLog4Net = null; 
    string logLevel = string.Empty; 
    public override void OnException(ExceptionContext filterContext) 
    { 

     _objLog4Net = LogManager.GetLogger(filterContext.RouteData.Values["controller"].ToString()); 

     logLevel = GetLogLevel(); 
     if (logLevel == "1" || logLevel == "2") 
     { 
      _objLog4Net.Error(filterContext.Exception.Message, filterContext.Exception); 
     } 

     if (logLevel == "3") 
     { 
      if (filterContext.Exception.GetType().IsSubclassOf(typeof(ApplicationException))) 
      { 
       _objLog4Net.Error(filterContext.Exception.Message, filterContext.Exception); 
      } 
     } 
    } 

    private string GetLogLevel() 
    { 
     return ConfigurationManager.AppSettings["LOGLEVEL1"].ToLower().ToString(); 
    } 

} 

這個類按日誌級別的ExceptionFilter類,記錄所有異常或僅應用程序異常。

如果Loglevel沒有任何條件變爲真/沒有記錄。

回答

1

這些類型的問題被投下來,你會很快看到...如果你想知道這是爲什麼,你分享你的要求,但可能是獨一無二的,但你沒有分享你所花費的分析工作。由此你問的問題屬於一般類別。我承認在這個網站上成爲一個新成員,需要一段時間才能得到這個。所以我的一點幫助是,

  1. 轉到下面提到的網站(谷歌搜索,你會得到很多)。
  2. 瞭解log4net提供了什麼以及它如何工作。
  3. 確定它是否適合您的要求(如果該選項打開)。
  4. 做一個概念驗證(POC),一個樣例項目,您可以像log4net那樣嘗試新東西(對於第一次嘗試的人)。
  5. 一旦你理解並開始使用圖書館發佈的具體問題或你遇到的問題(我們將很樂意提供幫助)。

幾個環節是:

http://www.codeproject.com/Articles/140911/log4net-Tutorial http://www.eyecatch.no/blog/2012/08/logging-with-log4net-in-c-sharp/

檢查下面的答案上左右爲好: https://stackoverflow.com/questions/4670916/does-anyone-know-any-tutorial-preferably-book-on-log4net

+0

嗨SBirthare, 我實現了一個全球性的過濾器(從HandleErrorAttribute繼承)的它的異常記錄工作正常(記錄異常)。 問題在於通過globalfilter記錄Logger.Info()/ Warn()調試()。在前面需要幫助 – shoab

+0

通過GloabalFilter?建議使用log4net的標準用法參考材料。我懷疑它根本與log4net無關。理想情況下,我們設置一個記錄器用於記錄目的,應該可以從任何需要記錄功能的組件訪問。對於402和500,我使用MagicalUnicornCustomErrorHandling NuGet包。您能否請添加更多關於您正在嘗試完成的信息(您可以更新您的原始問題以添加更多信息)。 – SBirthare

相關問題