wpf 全局异常捕捉+简单日志记录
`namespace MyApp
{
///
/// App.xaml 的交互逻辑
///
public partial class App : Application
{
public App()
{
//UI线程异常
this.DispatcherUnhandledException += App_DispatcherUnhandledException;
//非UI线程异常
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
    }
    private void App_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
    {
        //可以记录日志并转向错误bug窗口友好提示用户
        e.Handled = true;
        try
        {
            PLogs.Error(e.Exception.TargetSite.ToString(), e.Exception.Message);
        }
        catch (Exception)
        {
        }
    MessageBox.Show("抱歉给您带来不便!消息:" + e.Exception.Message, "系统错误",MessageBoxButton.OK,MessageBoxImage.Error);
    }
    private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        //可以记录日志并转向错误bug窗口友好提示用户
        if (e.ExceptionObject is System.Exception)
        {
            Exception ex = (System.Exception)e.ExceptionObject;
            try
            {
                PLogs.Error(ex.TargetSite.ToString(), ex.Message);
            }
            catch (Exception)
            {
            }
            MessageBox.Show("抱歉给您带来不便!消息:" + ex.Message, "系统错误", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }
}
}-----------------------------------------------分界线----------------------------------------------------- 日志: class PLogs
{
///
/// 普通日志
///
/// 类名
/// 日志记录
public static void Info(string className, string info)
{
WriteLog("INFO", className, info);
}
    /// <summary>
    /// 警告日志
    /// </summary>
    /// <param name="className">类名</param>
    /// <param name="info">日志记录</param>
    public static void Warn(string className, string info)
    {
        WriteLog("WARN", className, info);
    }
    /// <summary>
    /// 错误日志
    /// </summary>
    /// <param name="className">类名</param>
    /// <param name="info">日志记录</param>
    public static void Error(string className, string info)
    {
        WriteLog("ERROE", className, info);
    }
    /// <summary>
    /// 写入日志
    /// </summary>
    /// <param name="className">类名</param>
    /// <param name="infoLevel">日志级别</param>
    /// <param name="info">日志记录</param>
    private static void WriteLog(string className, string infoLevel, string info)
    {
        string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "/logs";
        if (!Directory.Exists(logFilePath))
        {
            Directory.CreateDirectory(logFilePath);
        }
        string logFileName = logFilePath + "/" + "log_" + DateTime.Now.ToString("yyyyMMdd") + ".log";
        if (!File.Exists(logFileName))
        {
            File.Create(logFileName).Close();
        }
        string logFormat = string.Format("[ {0} ] {1}  {2}  {3}",
                                       DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                       className, infoLevel, info);
        StreamWriter sw = File.AppendText(logFileName);
        sw.WriteLine(logFormat);
        sw.Flush();
        sw.Close();
    }
}`wpf 全局异常捕捉+简单日志记录的更多相关文章
- wpf 全局异常捕捉+错误日志记录+自动创建桌面图标
		/// /// 创建桌面图标 /// public static void CreateShortcutOnDesktop(string LnkName) { String shortcutPath ... 
- .NET Core通过过滤器和中间件两种方式实现全局异常捕获和日志记录
		1.一共有五类过滤器IAsyncAuthorizationFilter IAsyncResourceFilter IAsyncActonFilter IAsyncExceptionFilter ... 
- android中全局异常捕捉
		android中全局异常捕捉 只要写代码就会有bug,但是我们要想办法收集到客户的bug.有第三方bugly或者友盟等可以收集.但是,android原生就提供了有关收集异常的api,所以我们来学习一下 ... 
- Spring 全局异常捕捉
		Spring全局异常捕捉类 注解@ControllerAdvice package com.sicdt.sicsign.web.bill.controller; import org.springfr ... 
- springboot(四)拦截器和全局异常捕捉
		github代码:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service 全部 ... 
- 在Spring Boot中添加全局异常捕捉提示
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ... 
- (5)全局异常捕捉【从零开始学Spring Boot】
		在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 新建一个类GlobalDefaultExceptionHandler, 在class注解上@ControllerAdvice ... 
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 ||  AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
		代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ... 
- Z从壹开始前后端分离【 .NET Core2.0/3.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存
		本文梯子 本文3.0版本文章 代码已上传Github+Gitee,文末有地址 大神反馈: 零.今天完成的深红色部分 一.AOP 之 实现日志记录(服务层) 1.定义服务接口与实现类 2.在API层中添 ... 
随机推荐
- vue拼图动画Demo
			这是一个基于vue的Demo,可以实现拼图动画,但是具体的没有写拼图成功的逻辑,鼠标悬停移动.周期刷新 我把它放到的我的博客园界面上了.刷新界面可以看到. 演示地址 :https://liruilon ... 
- springboot2.2.2企业级项目整合redis与redis 工具类大全
			1.springboot2.2.2整合redis教程很多,为此编写了比较完整的redis工具类,符合企业级开发使用的工具类 2.springboot与redis maven相关的依赖 <depe ... 
- day52 Pyhton 前端03
			内容回顾 块级标签: div p h 列表:ol;ul;dl 表格:table 行内标签: span a i/em b/strong u/del 行内块: input textarea img 其他: ... 
- 洛谷 CF1012C Hills(动态规划)
			题目大意: 有几座山,如果一座山左右两边的山比它矮,那么可以在这个山上建房子,你有一台挖掘机,每天可以挖一座山一米,问你需要花多少代价可以分别盖1.2.3--座房子.(给出山的数量,以及每座山的高度) ... 
- 题解 CF1428A 【Box is Pull】
			通过理解题意,我们发现: 当需要拐弯的时候,兔子需要先走回箱子的位置,再走向拐弯的方向.则拐弯操作的花费为 \(2\) .而直行的操作花费为 \(1\) . 所以, 如果不需要拐弯,也就是 \(x1= ... 
- pycharm2018.3.5 下载激活(windows平台)
			软件下载: 百度网盘下载 提取码: 73p7 激活操作: 1.下载jar包 JetbrainsCrack-4.2-release-enc.jar 链接:https://pan.baidu.com/s/ ... 
- ubuntu基于VSCode的C++编程语言的构建调试环境搭建指南
			ubuntu基于VSCode的C++编程语言的构建调试环境搭建指南 首先安装g++ sudo apt install g++ 检查是否安装成功: 在插件栏安装插件c/c++.code runner: ... 
- Helium文档3-WebUI自动化-click点击
			前言 click点击方法在web UI自动化中使用频率非常高,此方法就是模拟鼠标左键单击动作 click入参说明 1.首先我们来分析一下click方法的代码 click(element): &qu ... 
- 一键开启win10全局utf8,编码问题说拜拜
			在windows下开发,开发环境的配置是一个很头大的问题,而编码问题是另一个令人头大的问题,常常出现的中文乱码令人痛不欲生,其原因就在于windows默认的编码并不是现在很普遍的utf8格式,本文就来 ... 
- The path "" is not a valid path to the 3.10.0-957.el7.x86_64 kernel headers.
			安装 kernel-devel yum install kernel-devel-$(uname -r) 
