• C# 捕获全局亲测可用


    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApp9
    {
        static class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                LogHepler log = new LogHepler();
                try
                {
                    //处理未捕获的异常
                    Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                    //处理UI线程异常
                    Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                    //处理非UI线程异常
                    AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    Application.Run(new Form1());
                }
                catch (Exception ex)
                {
                    string str = "";
                    string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "
    ";
                    if (ex != null)
                    {
                        str = string.Format(strDateInfo + "异常类型:{0}
    异常消息:{1}
    异常信息:{2}
    ",
                        ex.GetType().Name, ex.Message, ex.StackTrace);
                    }
                    else
                    {
                        str = string.Format("应用程序线程错误:{0}", ex);
                    }
                    MessageBox.Show(str, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    log.WriteLog(str);
                }
            }
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                LogHepler log = new LogHepler();
                string str = "";
                string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "
    ";
                Exception error = e.Exception as Exception;
                if (error != null)
                {
                    str = string.Format(strDateInfo + "异常类型:{0}
    异常消息:{1}
    异常信息:{2}
    ",
                    error.GetType().Name, error.Message, error.StackTrace);
                }
                else
                {
                    str = string.Format("应用程序线程错误:{0}", e);
                }
                MessageBox.Show(error.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                log.WriteLog(str);
            }
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                LogHepler log = new LogHepler();
                string str = "";
                Exception error = e.ExceptionObject as Exception;
                string strDateInfo = "出现应用程序未处理的异常:" + DateTime.Now.ToString() + "
    ";
    
                if (error != null)
                {
                    str = string.Format(strDateInfo + "Application UnhandledException:{0};
    
    堆栈信息:{1}", error.Message, error.StackTrace);
                }
                else
                {
                    str = string.Format("Application UnhandledError:{0}", e);
                }
                MessageBox.Show(error.Message, "系统错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                log.WriteLog(str);
            }
            public class LogHepler
            {
                /// <summary>
                /// 锁对象
                /// </summary>
                private static object lockHelper = new object();
                /// <summary>
                /// 写error级别日志
                /// </summary>
                /// <param name="errorMessage">异常信息</param>
                /// <param name="ex">异常类</param>
                public void WriteErrorLog(string errorMessage, Exception ex)
                {
                    string errorMsg = string.Empty;
                    if (ex.InnerException != null)
                    {
                        errorMsg = ex.InnerException.Message;
                    }
                    errorMsg = errorMsg + errorMessage + ex.StackTrace;
                    WriteLog(errorMsg);
                }
                /// <summary>
                /// 写日志
                /// </summary>
                /// <param name="msg">日志信息</param>    
                public void WriteLog(string msg)
                {
                    lock (lockHelper)
                    {
                        string FilePath = string.Empty;
                        string AbsolutePath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Log";
                        if (!Directory.Exists(AbsolutePath))
                        {
                            Directory.CreateDirectory(AbsolutePath);
                        }
                        FilePath = AbsolutePath + "\" + DateTime.Now.ToString("yyyyMMdd") + ".txt";
                        File.AppendAllText(FilePath, "
    " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "
    " + msg, Encoding.GetEncoding("gb2312"));
    
                    }
                }
            }
        }
    }
  • 相关阅读:
    IO以及file的一些基本方法
    异常处理和Throwable中的几个方法
    Map的嵌套
    Collections
    Map接口
    Set接口
    React生命周期执行顺序详解
    当面试官问你GET和POST区别的时候,请这么回答.......
    webpack.config.js配置遇到Error: Cannot find module '@babel/core'&&Cannot find module '@babel/plugin-transform-react-jsx' 问题
    前端简单实现校招笔试'作弊监听'功能
  • 原文地址:https://www.cnblogs.com/jianhongtang2016/p/9401342.html
Copyright © 2020-2023  润新知