zoukankan      html  css  js  c++  java
  • MVC下Log4Net的配置和使用

    MVC下Log4Net的配置和使用

    对于网站来讲,我们不能将异常信息显示给用户, Log4Net用来记录日志,可以将程序运行过程中的信息输出到文件,数据库中等地方,可以通过日志查看系统的运行过程,发现系统的问题。log4net的使用步骤如下:

          1.添加对log4net.dll的引用。

          2.在配置文件中添加配置。如下是在web.config的配置:

             在configSections下节点配置为:

    <!--日志的配置-->
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4Net"/>

            配置为:

       

    复制代码
     <!--日志的配置开始-->
    <log4net>
        <root>
          <level value="ALL"/>
          <appender-ref ref="SysAppender"/>
        </root>
     
        <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="Header" value="&#13;&#10;----------------------header--------------------------&#13;&#10;" />
            <param name="Footer" value="&#13;&#10;----------------------footer--------------------------&#13;&#10;" />
          </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>
      <!--日志的配置结束-->
    复制代码

           其中,Appender:可以将日志输出到不同的地方,不同的输出目标对应不同的Appender:RollingFileAppender(滚动文件)、AdoNetAppender(数据库)、  

     SmtpAppender (邮件)等。 level(级别):标识这条日志信息的重要级别。None>Fatal>ERROR>WARN>DEBUG>INFO>ALL,设定一个Level,那么低于这个

     Level的日志是不会被写到Appender中的。

    3.在程序一开始的时候,我们需要在Global.asax.cs文件中的Application_Start事件中进行一下初始化配置。

    复制代码
     protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                // 默认情况下对 Entity Framework 使用 LocalDB
                Database.DefaultConnectionFactory = new SqlConnectionFactory(@"Data Source=(localdb)\v11.0; Integrated Security=True; MultipleActiveResultSets=True");
    
                RegisterGlobalFilters(GlobalFilters.Filters);
                RegisterRoutes(RouteTable.Routes);
    
                //读取日志  如果使用log4net,应用程序一开始的时候,都要进行初始化配置
                log4net.Config.XmlConfigurator.Configure();
            }
    复制代码

    4.我们可以写一个类,定义一个静态方法,这个方法将可以将我们的错误消息进行输出。因为不仅仅一个地方需要,所以我们把它定义为了静态方法。

      

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Common.Logging;
    
    namespace HWH.OADemo.Common
    {
        public  class LogHelper
        {
            public static void WriteLog(string txt)
            {
                ILog log = LogManager.GetLogger("log4netlogger");
                log.Error(txt);
              
            }
        }
    }
    复制代码

    5.MVC为我们提供了一种全局过滤机制,其中有一种过滤器叫做异常过滤器,当项目中出现异常的时候执行异常处理器中的代码。

      为了做到不修改源代码,我们可以自定义一个类,使这个类继承自HandleErrorAttribute这个类,并重写其内部方法。这个方法内部代码的作用

      就是处理异常,将异常信息记录日志,让当前请求跳转到错误页面。

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace HWH.OADemo.UI.Models
    {
        public class MyExceptionFileAttribute:HandleErrorAttribute
        {
            public override void OnException(ExceptionContext filterContext)
            {
                base.OnException(filterContext);
                //处理错误消息,将其跳转到一个页面
                Common.LogHelper.WriteLog(filterContext.Exception.ToString());
                //页面跳转到错误页面
                filterContext.HttpContext.Response.Redirect("/Error.html");
            }
        }
    }
    复制代码

    6.由于全局都需要进行异常的处理,我们需要在Global.asax的RegisterGlobalFilters方法中注册我们自己的异常处理过滤器。

     public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                filters.Add(new MyExceptionFileAttribute());
            }

      操作完毕,在项目出现异常的时候,我们就很清楚的查看错误信息了。

     
     
    分类: MVC
  • 相关阅读:
    Rightmost Digit(快速幂+数学知识OR位运算) 分类: 数学 2015-07-03 14:56 4人阅读 评论(0) 收藏
    Can you find it? 分类: 二分查找 2015-06-10 19:55 5人阅读 评论(0) 收藏
    PIE(二分) 分类: 二分查找 2015-06-07 15:46 9人阅读 评论(0) 收藏
    HDU 1796 Howmany integers can you find (容斥原理)
    Monthly Expense(二分) 分类: 二分查找 2015-06-06 00:31 10人阅读 评论(0) 收藏
    POJ-1088 Skiing(记忆化搜索)
    悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 分类: dp 2015-05-21 10:50 14人阅读 评论(0) 收藏
    hdu 1010 Tempter of the Bone 深搜+剪枝
    索引原理与慢查询优化
    多表查询
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3062243.html
Copyright © 2011-2022 走看看