zoukankan      html  css  js  c++  java
  • 在C#代码中应用Log4Net(四)在Winform和Web中捕获全局异常

    原文:http://www.cnblogs.com/kissazi2/p/3393151.html

    毕竟人不是神,谁写的程序都会有bug,有了bug不可怕,可怕的是出错了,你却不知道错误在哪里。所以我们需要将应用程序中抛出的所有异常都记录起来,不然出了错,找问题就能要了你的命。下面我们主要讨论的是如何捕捉全局的异常。基本上在winform或web中捕获全局异常的思路都是一样的,在全局的应用程序对象中添加异常捕获的代码,并写入日志文件中。

    一.在Winform程序中捕获全局异常

    在winfrom中我们需要了解Application对象中的两个事件

    Application.ThreadException 事件--UI线程中某个异常未被捕获时出现。

    AppDomain.UnhandledException 事件--非UI线程中某个异常未被捕获时出现。

    我们需要在Program.cs中设置异常的捕捉代码(如下图所示)。LogHelper类是自定义的日志帮助类,在前面的几篇文章中已经有涉及到。

    image

    需要在Program.cs中添加的代码如下所示

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Windows.Forms;
    using System.Text;
    using Common;
    
    namespace testLog4N
    {
        static class Program
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main()
            {
                BindExceptionHandler();//绑定程序中的异常处理
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            /// <summary>
            /// 绑定程序中的异常处理
            /// </summary>
            private static void BindExceptionHandler()
            {
                //设置应用程序处理异常方式:ThreadException处理
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                //处理UI线程异常
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                //处理未捕获的异常
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
            }
            /// <summary>
            /// 处理UI线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                LogHelper.ErrorLog(null, e.Exception as Exception);
            }
            /// <summary>
            /// 处理未捕获的异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                LogHelper.ErrorLog(null, e.ExceptionObject as Exception);
            }
        }
    }

    示例性代码下载

  • 相关阅读:
    handlebars.js 模板引擎
    g2-plugin-slider.js 数据滚动条插件
    js拓扑图-vis插件
    js地图-leaflet
    css3 animation动画停留在最后一帧
    input输入手机号增加空格
    百度输入框 获取焦点时 滚动到页面顶部的实现
    C#入门经典-第15章Windows 编程
    C# 经典入门12章-System.Collections.Generic命名空间
    C# 经典入门12章-使用泛型-1
  • 原文地址:https://www.cnblogs.com/weekend001/p/3525142.html
Copyright © 2011-2022 走看看