在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》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

网络空间导论

网络空间导论

李良荣、方师师 / 复旦大学出版社 / 2018-6-1 / 38

在互联网蓬勃发展的今天,新闻传播学科该往何处去?在长达半个多世纪的深入研究后,李良荣教授及其团队给出了答案:从“小新闻”走向“大传播”,并撰写了这本开创性的教材:《网络空间导论》。 在本书中,互联网被定义为“空间”——持续演进的数字化现实。为了深刻把握网络空间的内涵,本书提供了六个维度的观察:技术应用、组织架构、政治经济、媒介文化、网络素养、安全治理,并以大胆且富有建设性的观点重新定义了新闻......一起来看看 《网络空间导论》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

SHA 加密
SHA 加密

SHA 加密工具

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

在线 XML 格式化压缩工具