1.什么是log4net

  log4net是一个可以帮助程序员把日志信息输出到各种 不同目标的.net类库。它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace 类的功能更多。log4net是从java下有卓越表现的log4j移植过来的。它是apache基金资助的项目的一部分。

  日志查看系统的运行过程,从而发现系统的问题。日志的作用:将运行过程的步骤、成功失败记录下来。将关键字性的数据记录下来分析系统问题所在。

  对于网站来讲,不能吧异常信息显示给用户,异常信息只能记录到日志,出现了问题吧日志文件发给开发人员,就知道问题所在。

2.Log4net 提供 7个日志等级,从高到底分别为:OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL

3.Log4net 有 3个主要的成员: loggers ,appenders 和 layouts 。

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

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 > )
{
//取出数据
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();
} }
else
{
//如果队列中没有数据,让线程休息3秒钟
Thread.Sleep();
}
}
}, filePath);
}

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

  1. 在C#MVC三层项目中如何使用SprintNet

    0.添加dll文件 1.首先在根目录下新建一个文件夹[Config],然后新建2两个xml文件. 1-1[controllers.xml]用来配置需要创建的对象 1-2[service.xml]用来配 ...

  2. ASP.NET MVC Web项目中使用Log4Net记录日志,并按照日志类型分文件存储

    1.创建MvcLog4Net项目 2.创建 空的MVC项目 3.项目创建完成的效果 4.选择项目,点击鼠标右键,在弹出菜单中选择“管理解决方案的 NuGet 程序包” 5. 在NuGet浏览界面: 点 ...

  3. [渣翻译] 在ASP.NET MVC WebAPI项目中使用 AngularJS

    原文地址http://blog.technovert.com/2013/12/setting-up-angularjs-for-asp-net-mvc-n-webapi-project/ 我们最近发布 ...

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

    MVC在生成项目的时候会生成的WEB-INF底下.这个文件夹下面的文件是受保护的,都会走MVC的流程, 但是我希望在WebContent底下可以使用静态页面, 那么需要进入springmvc-serv ...

  5. 【手把手教你Elmah】如何在MVC.NET项目中在线查看【错误日志】

     一.  在NuGet下载Elmah.MVC dll文件!  或者点击下载dll文件,并且引用客户端. 二.配置WebConfig <sectionGroup name="elmah& ...

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

    给框架添加一个面包屑导航 1.创建一个类 using System; using System.Collections.Generic; using System.Linq; using System ...

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

    原文地址:http://www.cnblogs.com/zdh8675/p/3645556.html 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用 ...

  8. (转载)Log4Net 在多层项目中的使用小记

    (原创)Log4Net 在多层项目中的使用小记 这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各 ...

  9. (原创)Log4Net 在多层项目中的使用小记

    这几天刚好在调整一个项目,把一些自己不是很清楚的东西先试验一下,这篇文章主要是对我在项目中需要使用Log4Net的一些记录.网上有很多相关的教程,但是各有各的说法,我结合我自己这个项目的需要,首先,项 ...

随机推荐

  1. [转帖]RSYNC 的核心算法

    RSYNC 的核心算法 https://coolshell.cn/articles/7425.html rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并 ...

  2. JavaWeb中登录验证码生成

    1.页面代码 <html> <head> <title>Title</title> <script type="text/javascr ...

  3. JS如何进行对象的深克隆(深拷贝)?

    JS中,一般的赋值传递的都是对象/数组的引用,并没有真正的深拷贝一个对象,如何进行对象的深拷贝呢? var a = {name : 'miay'}; var b = a; b.name = 'Jone ...

  4. 盘点Linux运维常用工具(二)-web篇之nginx

    1.nginx的概述 .nginx是一个开源的.支持高性能.高并发的WWW服务和代理服务软件 .是由俄罗斯人Igor Sysoev开发的,具有高并发.占用系统资源少等特性 .官网:http://ngi ...

  5. MySQL数据库常用命令行整理(表格)

    Laplace Kang 2020-03-13T08:33:09Z 2020-03-14T17:35:53Z Sheet1 12480 9 600 600 6 9600 23040 0 0 600 0 ...

  6. 用libvlc 播放指定缓冲区中的视频流

    有时候,我们需要播放别的模块传输过来的视频流,VLC提供了这样的机制,但一般很少这样用,下面的例子实现了这样的功能. 其中用到一个关键的模块 imem.  vlc提供多种创建媒体的方式,如要从指定缓存 ...

  7. 树链剖分与倍增求LCA

    树链剖分与倍增求\(LCA\) 首先我要吐槽机房的辣基供电情况,我之前写了一上午,马上就要完成的时候突然停电,然后\(GG\)成了送链剖分 其次,我没歧视\(tarjan LCA\) 1.倍增求\(L ...

  8. Java 锁详解(转)

    转自 https://www.cnblogs.com/jyroy/p/11365935.html Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相 ...

  9. java-FileUtils(读取、判断、获取)-(新手)

    实例: lx1: import org.apache.commons.io.*; import java.io.File; import java.io.IOException; public cla ...

  10. [Alg] 文本匹配-多模匹配-AC自动机

    1. 简介 AC自动机是一种多模匹配的文本匹配算法. 如果采用naive的方法,即依次比较文本串s中是否包含模式串p1, p2,...非常耗时.考虑到这些模式串中可能具有相同子串,可以利用已经比较过的 ...