zoukankan      html  css  js  c++  java
  • 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());
            }

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

  • 相关阅读:
    pat00-自测5. Shuffling Machine (20)
    Spiral Matrix
    Search in Rotated Sorted Array II
    Search in Rotated Sorted Array
    Best Time to Buy and Sell Stock II
    4Sum
    3Sum Closest
    3Sum
    MySQL存储过程、函数和游标
    Word Ladder
  • 原文地址:https://www.cnblogs.com/weixing/p/3065186.html
Copyright © 2011-2022 走看看