私のはAsp.net MVC 4アプリケーションです。以下を実装する必要があります。web.config ファイルで設定されたログ レベル (例: 1/2/3/4)
私はログに記録する必要があります:
1 :
- メソッド開始
- メソッド終了
- アプリケーションの警告
アプリケーション例外
2:
- アプリケーションの警告
- アプリケーションの例外
3:
- アプリケーションの例外
4:
- なし
さらに、グローバルフィルターを使用してこれを達成する必要があります。
親切に私にいくつかの指針を提供してください。
前もって感謝します。
解決済み
以下は私の手順です
次の Filter クラスを作成しました
[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() を介して Method Start および Method End のログが記録されます。
さらに以下は、例外をログに記録するための ExceptionFilter クラスです。
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();
}
}
このクラスは、ログ レベルごとに、すべての例外をログに記録するか、アプリケーションの例外のみをログに記録します。
Loglevel が none の場合、どの条件も真になりません / 何もログに記録されません。