mvc中日志的原理和使用步骤

日志原理 就是观察者模式(订阅发布模式) , 具体和委托很像

使用步骤  在 log4net框架下

1.在Common中定义LogHelper入口类

1.定义LogHelper类

namespace LTeasyOA.Common
{
public class LogHelper
{
public static Queue<string> ExceptionStringQueue = new Queue<string>();//日志消息队列
public static List<ILogWriter> LogWriterList = new List<ILogWriter>();//接受订阅者的集合   提供入口
public static void WriteLog(string exceptionText)
{
lock (ExceptionStringQueue)
{
ExceptionStringQueue.Enqueue(exceptionText);
}
}

//静态函数的调用时机,是在类被实例化或者静态成员被调用的时候进行调用,
//并且是由.net框架来调用静态构造函数来初始化静态成员变量。

static LogHelper() //静态构造函数  只要是调用该类的任何构造方法 或实例化 都会调用此构造方法来初始化和执行日志函数
{

//LogWriterList.Add(new TextFileWrite());
//LogWriterList.Add(new SqlServerWriter());
LogWriterList.Add(new Log4NetWriter());  //添加订阅者  和委托赋值原理一样
ThreadPool.QueueUserWorkItem(o => {
lock (ExceptionStringQueue)
{
string str = ExceptionStringQueue.Dequeue();

//将异常信息写到日志文件中去 但有可能是文本文件 也可能是数据库文件
foreach (var ListItem in LogWriterList)
{
ListItem.WriteLogInfo(str);
}

//控件在这里帮我们自动实现 有一个框架 Log4Net

}
});
}
}
}

当然可以用多态

实现接口

namespace LTeasyOA.Common
{
public interface ILogWriter
{
void WriteLogInfo(string str);
}
}

子类实现

    public class Log4NetWriter:ILogWriter
    {
        public void WriteLogInfo(string str)
        {
            ILog logWriter = log4net.LogManager.GetLogger("Demo");
            logWriter.Error(str);
        }
    }

static LogHelper中实例化

2.

定义一个继承HandleErrorAttribute的子类 实现OnException()方法

namespace LTeasyOA.UI.Portal2.Models
{
    public class MyExceptionFilterAttribute:HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            //直接把错误写到 日志中去
            base.OnException(filterContext);
            Common.LogHelper.WriteLog(filterContext.Exception.ToString());
        }
    }
}

filterConfig中添加过滤器

using LTeasyOA.UI.Portal2.Models;
using System.Web;
using System.Web.Mvc;

namespace LTeasyOA.UI.Portal2
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //filters.Add(new HandleErrorAttribute());
            filters.Add(new MyExceptionFilterAttribute());
            //第一步
            // 过滤器 目前三种  ActionFilter ResultFilter ExceptionFilter
        }
    }
}

web.config添加配置 两步

1.块配置

1 <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
2 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
3 </configSections>

2.log4net节点配置

<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="DEBUG"/>
    </logger>

    <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net" >
      <param name="File" value="App_Data/" />
      <param name="AppendToFile" value="true" />
      <param name="RollingStyle" value="Date" />
      <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
      <param name="StaticLogFileName" value="false" />
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
        <param name="日志开始" value="
----------------------header--------------------------
" />
        <param name="日志结束" value="
----------------------footer--------------------------
" />
      </layout>
    </appender>
    <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
  </log4net>

global中初始化

    public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //加载配置 初始化
            log4net.Config.XmlConfigurator.Configure();
        }
    }

测试

大功告成!!!!!

时间: 2024-10-13 05:37:30

mvc中日志的原理和使用步骤的相关文章

网站数据统计分析中的日志收集原理及其实现

> 网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析.百度统计 和 腾讯分析等等.所有这些统计分析工具的第一步都是网站访问数据的收集.目前主流的数据收集方式基本都是基于javascript的.本文将简要分析这种数据收集的原理,并一步一步实际搭建一个实际的数据收集系统. 1.数据收集原理分析 简单来说,网站统计分析工具需要收集到用户浏览目标网站的行为(如打开某网页.点击某按钮.将商品加入购物车等)及行为附加数据(如某下单行为产生的订单金额等).早期的网站统计往往只收

[.Net Core] 在 Mvc 中简单使用日志组件

在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 HomeController.cs 进行演示. 需要 using Microsoft.Extensions.Logging; 方案一: public class HomeController : Controller { private readonly ILogger _logger ; public

ASP.NET MVC中Log4Net记录错误日志的使用

第一.在管理NuGet程序包 =>下载 Log4Net 第二.在web.config配置Log4Net 1:在<configuration>节点下 <configSections>节点中 配置log4Net节点引用. <!--log4net日志记录--> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net

Mysql中主从复制的原理、配置过程以及实际案例

Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6.7_64位操作系统,并分别在两台服务器上安装mysql.我的IP地址分别为:192.168.1.15/192.168.1.16,这里我定义15为主服务器,16为从服务器.首先,我们编辑主服务器中mysql配置文件.(因我的mysql使用非root用户安装,因此配置文件放在/home/formal/

MVC中的Views下面的视图放到Views文件夹外

实战:把ASP.NET MVC中的Views下面的视图放到Views文件夹外 园子里写的文章的都是把控制器从传统的项目中的Controllers拿出来单独放,但很少几乎没有把视图从Views拿出去这样的文章,今天来写一个. 今天学习MVC的时候,试着实现了一下,其实很简单!一步步解决问题就行了,下面记录如下,供需要的同学参考,写的不好,轻喷,谢啦 首先咱们自己建一个MyCustomView文件夹 下面建一个Home文件夹里面放Index.cshtml视图 删除原来Views/Home/Index

6.在MVC中使用泛型仓储模式和依赖注入实现增删查改

原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pattern-and-dep/ 系列目录: Relationship in Entity Framework Using Code First Approach With Fluent API[[使用EF Code-First方式和Fluent API来探讨EF中的关系]] Code First Mig

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

在ASP.NET MVC中,通过应用程序生命周期中的Application_Error事件可以捕获到网站引发的所有未处理异常.本文作为学习笔记,记录了使用Global.asax文件的Application_Error事件处理和捕获全局异常的详细步骤. 文章演示项目是使用vs2013编译器编写的,下载地址:GlobalExceptionHandle-By-Application_Error.zip. 在VS2013中新建一个MVC项目,这里要先关闭自定义错误,将Web.config配置文件中cus

log4net 使用总结- (1)在ASP.NET MVC 中使用

1. 去官网下载log4net.dll,增加引用到站点下(你也可以通过nuget 安装) http://logging.apache.org/log4net/download_log4net.cgi 2. 在Web.config中增加配置(这里按日志文件输出) <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, lo

mvc和iis工作原理

学习IIS & MVC的运行原理 我一直疑惑于以下问题,从客户端发出一个请求,请求到达服务器端是怎样跟iis衔接起来的,而iis又是怎样读取我发布的代码的,并返回服务器上的文件.这其中是怎样的一个处理过程. 1:当你从浏览器中输入一个地址或点击一个链接开始,你就已经发出了一个http请求(会根据请求者请求的主机头或者IP或者端口号来找到对应的站点): 2:根据http协议,当请求到达相应的主机服务器时,由服务器上的系统进程http.sys(可以理解为专门处理http请求的进程)接收: 3:htt