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

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

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文件中注册自己定义的异常处理过滤器

1.添加bll文件

2.在Web.Config中配置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。

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);
        }

原文地址:https://www.cnblogs.com/liutaovip/p/12636700.html

时间: 2024-10-03 02:56:25

在MVC三层项目中如何使用Log4Net的相关文章

在MVC的项目中访问静态页面

MVC在生成项目的时候会生成的WEB-INF底下.这个文件夹下面的文件是受保护的,都会走MVC的流程, 但是我希望在WebContent底下可以使用静态页面, 那么需要进入springmvc-servlet.xml 页面,加上一句话:  <mvc:resources mapping="/**"  location="/**" /> 这样,使用mvc:resources标签,可以将根目录下的文件全部定义为静态html,直接访问即可. 需要放到文件夹中: &

如何在asp.net的mvc类型项目中添加webservice

先在项目中添加webservice 会产生一个asmx结尾的文件,然后在其cs中写方法. 另外在global.asax.cs里或App_Start/Route_Config中加一句 routes.IgnoreRoute("{resource}.asmx/{*pathInfo}"); 这样asmx后缀的web service就不会被mvc的routing来处理了.

ASP.NET MVC 在项目中使用面包屑导航

给框架添加一个面包屑导航 1.创建一个类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SAS.Model.AdminCommon { public class BreadCrumbsModel { public BreadCrumbsModel() { BreadCrumbList = new List<BreadCrumbModel>(); }

log4net在项目中使用

 1>从log4net官网下面log4net的文件包,然后在包的bin文件夹下的net文件夹中的4.0文件夹中找到log4net.dll文件,然后将它引入到我们的项目中来 2>在项目中新建一个log4net.config的配置文件.下面我们来配置这个log4net.config配置文件 <?xml version="1.0" encoding="utf-8"?> <configuration> <configSectio

Log4Net 在多层项目中的使用小记

原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项目是分多层的,假如每一层都需要加入日志记录,那该怎么办呢,下面是我的一些操作步骤,记录出来和大家分享一下,不足之处希望大家多拍板砖多多指教. 这个截图是我的当前项目的层次结构,首先在Common层先

MVC项目中使用Ztree

最近新接触了MVC,慢慢的摸索学习中,在我的mvc练习项目中需要使用Ztree展示网站的栏目导航. 在网上查找了相关资料,以及看了Ztree的API文档,最终实现了该功能. 下面进行步骤说明: 第一步: 官网下载Ztree,将css和js文件夹复制粘贴进项目中. 第二步: 引用Ztree样式和js 第三步,建立ZNode模型 /// <summary> /// 树节点 /// </summary> public class ZNode { public string id { ge

记三层项目

来北京学习也一个多月了,三层项目也结束了快一个星期了,觉得还是有必要总结一下.整个三层班级三层项目的效果在这里. 我们组做的三层项目是一个经销商的管理系统,说真的,到项目结束后我都不知道我们组到底做了什么.在项目答辩之前,一直觉得我们组的项目是最二的一个,但没想到结果挺意外的.因为我自己觉得,其它组的项目都是一个完整的成型的项目,而唯有我们组的项目是一个不能够用的半成品,也许是题目太大了,在短时间内根本就弄不出来. 在本次项目中我作为我们组的组长,收获其实也蛮大的,大概的就总结一下收获和问题等.

单元测试中如何配置log4net

按道理来说,单元测试中基本没有对于日志的需求,这是由于单元测试的定位来决定的. 因为单元测试的思想就是针对的都是小段代码的测试,逻辑明确,如果测试运行不通过,简单调试一下,就能很容易地排查问题.但是单元测试也是一个简便好用的的启动器.总不能调试任何代码,都要我启动一个Windows或者Web项目吧,这样太笨重了,而且项目越大,启动时间越长.在把单元测试用作启动器的情况下,就会有需求使用log4net. 进入正题 如何在一个单元测试项目中,配置log4net: 1. 添加log4net配置文件 这

Asp.net MVC企业级开发(02)---Log4net

Log4Net 是用来记录日志的,可以将程序运行过程中的信息输出到一些地方(文件.数据库.EventLog等).日志就是程序的“黑匣子”,可以通过日志查看系统的运行过程,从而发现系统的问题. 日志的作用就是将运行过程的步骤.成功失败记录下来,将关键性的数据记录下来分析系统问题所在. 对于Web应用来说,不能把异常信息显示给用户,异常信息只能记录到日志,出了问题把日志文件发给开发人员就能知道问题所在. 2.1 配置 Log4Net 环境 Log4Net 的配置步骤如下: 1. 引用 log4net