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沒有任何條件變爲真/沒有記錄。
嗨SBirthare, 我實現了一個全球性的過濾器(從HandleErrorAttribute繼承)的它的異常記錄工作正常(記錄異常)。 問題在於通過globalfilter記錄Logger.Info()/ Warn()調試()。在前面需要幫助 – shoab
通過GloabalFilter?建議使用log4net的標準用法參考材料。我懷疑它根本與log4net無關。理想情況下,我們設置一個記錄器用於記錄目的,應該可以從任何需要記錄功能的組件訪問。對於402和500,我使用MagicalUnicornCustomErrorHandling NuGet包。您能否請添加更多關於您正在嘗試完成的信息(您可以更新您的原始問題以添加更多信息)。 – SBirthare