在MVC三层项目中如何使用Log4Net

栏目: IT技术 · 发布时间: 4年前

内容简介:--前期准备(添加到队列中)0-1在新建后的MVC项目中的【Models】中添加一个类,用于处理异常信息,并继承自HandleErrorAttribute0-2在FilterConfig文件中注册自己定义的异常处理过滤器

--前期准备(添加到队列中)

0-1在新建后的MVC项目中的【Models】中添加一个类,用于处理异常信息,并继承自HandleErrorAttribute

  public class MyExceptionAttribute: HandleErrorAttribute
    {


        //创建队列集合
        public static Queue<Exception> ExceptionQueue = new Queue<Exception>();


        /// <summary>
        /// 可以捕获异常数据
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            Exception ex = filterContext.Exception;
            //写到队列
            //插入到队列里面
            ExceptionQueue.Enqueue(ex);
            //跳转到错误页面
            filterContext.HttpContext.Response.Redirect("/Error.html");
        }

    }

0-2在FilterConfig文件中注册自己定义的异常处理过滤器

在MVC三层项目中如何使用Log4Net

在MVC三层项目中如何使用Log4Net

1.添加bll文件

在MVC三层项目中如何使用Log4Net

2.在Web.Config中配置Log4Net

在MVC三层项目中如何使用Log4Net

在MVC三层项目中如何使用Log4Net

    <!--Spring.Net配置-->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4" />
    </sectionGroup>

    <!--log4net配置-->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

  </configSections>


  <!--Spring.Net配置节点开始-->
  <spring>
    <context>
      <resource uri="file://~/Config/controllers.xml" />
      <resource uri="file://~/Config/services.xml" />
    </context>
  </spring>
  <!--Spring.Net配置节点结束-->
<!--log4net配置节点开始-->
  <!-- Level的级别,由高到低 -->
  <!-- None > Fatal > ERROR > WARN > DEBUG > INFO > ALL-->
  <!-- 解释:如果level是ERROR,则在cs文件里面调用log4net的info()方法,则不会写入到日志文件中
   type="log4net.Appender.RollingFileAppender":记录到文件
  -->
  <log4net>
    <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
    <!-- Set root logger level to ERROR and its appenders -->
    <root>
      <level value="ERROR" />
      <appender-ref ref="SysAppender" />
    </root>

    <!-- Print only messages of level DEBUG or above in the packages -->
    <logger name="WebLogger">
      <level value="ERROR" />
    </logger>
    <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="App_Data/Log/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="yyyy\\yyyy-MM\\yyyy-MM-dd'.txt'" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />
      </layout>
    </appender>
    <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别:  %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n" />
      </layout>
    </appender>
  </log4net>
  <!--log4net配置节点结束-->

3.在Global.asax文件中的Application_Start方法中初始化log4net,不要加到页面的Load。

在MVC三层项目中如何使用Log4Net

4.在Application_Start写以下代码,用来添加到队列

//【开启一个线程,扫描异常信息队列】
            //拿到文件夹的物理路径
            string filePath = Server.MapPath("/Log/");
            //开启线程,使用线程池
            ThreadPool.QueueUserWorkItem((a) =>
            {
                //线程一直在执行
                while (true)
                {
                    //判断队列中有数据,Count>0表示有数据
                    if (MyExceptionAttribute.ExceptionQueue.Count > 0)
                    {
                        //取出数据
                        Exception ex = MyExceptionAttribute.ExceptionQueue.Dequeue();
                        //判断是否真正拿到数据
                        if (ex != null)
                        {
                            //【将异常信息写到日志文件中】
                            //根据年月日 来命名日志文件
                            //string fileName = DateTime.Now.ToString("yyyy-MM-dd");
                            //File.AppendAllText(filePath + fileName + ".txt", ex.ToString(),System.Text.Encoding.UTF8);


                            //【使用log4net】
                            ILog logger = LogManager.GetLogger("errorMsg");
                            //将异常信息写入到log4net中
                            logger.Error(ex.ToString()); 
                            
                        }
                        else
                        {
                            //如果队列中没有数据,让线程休息3秒钟
                            Thread.Sleep(3000);
                        }

                    }
                    else
                    {
                        //如果队列中没有数据,让线程休息3秒钟
                        Thread.Sleep(3000);
                    }
                }
            }, filePath);
        }

以上所述就是小编给大家介绍的《在MVC三层项目中如何使用Log4Net》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

JavaScript DOM编程艺术

JavaScript DOM编程艺术

Jeremy Keith / 杨涛、王建桥、杨晓云 / 人民邮电出版社 / 2006年12月 / 39.00元

本书讲述了JavaScript和DOM的基础知识,但重点放在DOM编程技术背后的思路和原则:预留退路、循序渐进和以用户为中心等,这些概念对于任何前端Web开发工作都非常重要。本书将这些概念贯穿在书中的所有代码示例中,使你看到用来创建图片库页面的脚本、用来创建动画效果的脚本和用来丰富页面元素呈现效果的脚本,最后结合所讲述的内容创建了一个实际的网站。 本书适合Web设计师和开发人员阅读。一起来看看 《JavaScript DOM编程艺术》 这本书的介绍吧!

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试