2

我的是一个 Asp.net MVC 4 应用程序。我需要执行以下操作;根据 web.config 文件中设置的日志级别(例如 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() 将记录方法开始和方法结束。

以下是用于记录异常的 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,则没有条件为真/不记录任何内容。

4

1 回答 1

1

这些类型的问题被否决了,您很快就会看到……如果您想知道这是为什么,您分享了您可能是独一无二的需求,但是您没有分享您花费的分析工作。因此,您提出的问题属于一般类别。我承认自己是这个网站的新成员,需要一些时间才能得到这个。所以我这边的一点帮助是,

  1. 转到下面提到的网站(在谷歌搜索,你会得到更多)。
  2. 了解 log4net 提供什么以及它是如何工作的。
  3. 确定它是否符合您的要求(如果该选项已打开)。
  4. 进行概念验证 (POC),这是一个示例项目,您可以在其中尝试新的东西(对于第一次尝试的人),例如 log4net。
  5. 一旦您了解并开始使用该库,请发布您面临的具体问题或问题(我们将很乐意提供帮助)。

几个链接是:

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

检查以下关于 SO 的答案: https ://stackoverflow.com/questions/4670916/does-anyone-know-any-tutorial-preferably-book-on-log4net

于 2013-08-27T06:39:48.033 回答