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. 基于abp框架的数据库种子数据初始化

    目录 基于abp框架的数据库种子数据初始化 1.背景 2.参照 3.解决方案 3.1 初始化数据 3.2 依赖注入方法容器里获取数据库上下文 3.3 封装创建初始化数据列表方法 3.4 数据库中没有的 ...

  2. 小程序自定义switch组件

    如上图,小程序api中的switch组件只能自定义颜色,不能自定义宽高,所以就开始了自己写switch组件. 自定义组件样式 switch组件样式大致如图,样式思路:未选中时为一个长方形有圆角按钮,和 ...

  3. C++ non-const lvalue reference cannot bind to a temporary

    1. 问题代码 #include <iostream> #include <vector> //注意begin和end形参都声明为引用 bool find_int(std::v ...

  4. Linux启动nginx时报错nginx: [emerg] getpwnam("nginx") failed

    编译时指定了用户而没有创建用户导致报错 解决: 查看你添加的用户是什么, [root@localhost nginx]# sbin/nginx -Vnginx version: nginx/1.10. ...

  5. vue基础----组件通信($parent,$children)

    1.按照dom的父子级关系,在子组件中可以通过$parent 直接调用父组件的方法,也可得到父组件的属性. 2.在父组件中通过$childrens可以得到一个子组件数组,能够在父组件中调用子组件的方法 ...

  6. Java POI 实现Excel相同数据同一颜色,不同数据颜色交替显示

    目录 1.效果图 2.具体代码实现 excel 读取工具类 excel写入和测试类 1.效果图 2.具体代码实现 excel 读取工具类 package utils; import java.io.F ...

  7. 将config从内部移动到外部 3部曲

    1 创建 public/config.js /* eslint-disable no-shadow-restricted-names */ // eslint-disable-next-line no ...

  8. Layui select下拉框改变之 change 监听事件(转)

    在layui中使用 jquery 触发select 的 change事件无效 使用layui.use监听select事件 <select lay-filter="demo" ...

  9. 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)

    基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36   by Louis  一,新建一个类GameFrame.class,具体代码如下: pack ...

  10. BigInteger实现除法取余

    BigInteger实现除法取余 BigInteger是什么? Java中,整形的最大范围是64位的long型整数.但是如果我们使用的整数超过了64位呢?这时候就用到了BigInteger.BigIn ...