MVC中使用Log4net

MVC配置Log4Net

  • 在Nuget中搜索Log4net ,在根目录中新建一个文件夹“error”,在根目录下新建一个错误页网页叫(error.html)

  • 在“error”文件夹中创建MyExceptionAttribute.cs文件


 /// <summary>
    /// 这是异常过滤器
    /// 要在FilterConfig中注册一下
    /// </summary>
    public class MyExceptionAttribute : HandleErrorAttribute
    {
        /// <summary>
        /// 捕获异常
        /// </summary>
        /// <param name="filterContext"></param>
        public override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);
            Exception exception = filterContext.Exception;
            //写入队列
            ExcptionQueue.Enqueue(exception);
            //跳到错误页
            filterContext.HttpContext.Response.Redirect("/error.html");

        }

        /// <summary>
        /// 创建队列
        /// </summary>
        public static Queue<Exception> ExcptionQueue = new Queue<Exception>();
    }
  • 打开App_Start文件夹中的FilterConfig.cs修改

    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
          //  filters.Add(new ErrorHandler.AiHandleErrorAttribute());
          //自己的异常捕获上面是系统的
            filters.Add(new WebApp.error.MyExceptionAttribute());
        }
    }
  • 进入Web.config中添加配置信息

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>



 <log4net>
    <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
    <!-- Set root logger level to ERROR and its appenders -->
    <root>
      <level value="ALL"/>
      <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="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>

在根目录Global.asax的Application_Start()方法中配置


        protected void Application_Start()
        {
            //log4net
            log4net.Config.XmlConfigurator.Configure();

            //开启线程,扫描异常信息队列
            string filePath = Server.MapPath("/Log/");
            ThreadPool.QueueUserWorkItem((a)=> {
                while (true)
                {
                    //队列是否有数据
                    if (WebApp.error.MyExceptionAttribute.ExcptionQueue.Count()>0)
                    {
                        //出队
                        Exception exception = WebApp.error.MyExceptionAttribute.ExcptionQueue.Dequeue();
                        if (exception != null)
                        {
                            写入日志文件
                            //string fileName = DateTime.Now.ToString("yyyy-MM-dd");
                            //File.AppendAllText(filePath + fileName + ".txt", exception.ToString(), System.Text.Encoding.UTF8);

                            ILog logger = LogManager.GetLogger("errorMsg");
                            logger.Error(exception.ToString());

                        }
                        else
                        {
                            Thread.Sleep(3000);
                        }
                    }
                    else
                    {
                        Thread.Sleep(3000);
                    }
                }
            },filePath);


            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
      }

调试时使用开始执行不调试,程序异常时会在根目录的App_Data文件夹中生成错误信息的文本文件,记得网上找个好看的错误页

扩展
在根目录Global.asax文件中,新建一个Application_Error()方法


        protected void Application_Error(object sender, EventArgs e)
        {
            Exception ex = Server.GetLastError();
            if (ex is HttpException && ((HttpException)ex).GetHttpCode() == 404)
            {
            //跳转到错误页
                Response.Redirect("/Error.html");
            }
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值