还在到处加异常日志记录?试试全局异常统一处理吧(包含.net core、WPF、Console实现方法)。

🏆作者:科技、互联网行业优质创作者
🏆专注领域:.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造
🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你快速成长。升职+涨薪!!

图片

在.NET应用程序中,使用log4net来记录日志并实现全局异常处理是一种常见的做法。log4net是一个强大的日志记录框架,可以帮助您捕获应用程序中的异常信息并将其记录到不同的目标(如文件、数据库、控制台等)。下面我将分别为.NET Core、WPF和Console应用程序提供全局异常处理的示例,使用log4net来记录异常日志。

1. .NET Core 应用程序

.NET Core 全局异常处理方法

在.NET Core应用程序中,可以通过订阅AppDomain.CurrentDomain.UnhandledException事件和AppDomain.CurrentDomain.ProcessExit事件来实现全局异常处理。log4net将用于记录异常信息。

首先,确保您已经安装了log4net包,可以使用NuGet Package Manager来安装。

dotnet add package log4net

然后,创建一个log4net配置文件,例如log4net.config,以配置日志记录器的目标(例如,将日志记录到文件):

<log4net>
  <root>
    <level value="ERROR" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
    <file value="log.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
  </appender>
</log4net>

接下来,创建一个.NET Core控制台应用程序,并添加log4net的配置。

using System;
using System.IO;
using log4net;
using log4net.Config;

namespace GlobalExceptionHandlingCore
{
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            // 配置log4net
            var log4netConfig = new FileInfo("log4net.config");
            XmlConfigurator.Configure(log4netConfig);

            AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

            // 模拟一个引发异常的操作
            int result = 1 / 0;

            Console.WriteLine("应用程序继续执行...");
        }

        static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
        {
            log.Error("发生未处理的异常", (Exception)e.ExceptionObject);
            // 在此可以记录异常、通知开发人员或采取适当的措施
        }
    }
}

在这个示例中,我们首先配置log4net,然后订阅AppDomain.CurrentDomain.UnhandledException事件以捕获未处理的异常并记录它们。

2. WPF (Windows Presentation Foundation) 应用程序

WPF 全局异常处理方法

在WPF应用程序中,我们可以使用Application.DispatcherUnhandledException事件来实现全局异常处理,同样使用log4net来记录异常信息。

首先,确保您在WPF项目中安装了log4net包,可以使用NuGet Package Manager来安装。

Install-Package log4net

然后,创建一个log4net配置文件,如前所述。

接下来,创建一个WPF应用程序并在App.xaml.cs中添加全局异常处理。

using System;
using System.IO;
using System.Windows;
using log4net;
using log4net.Config;

namespace GlobalExceptionHandlingWPF
{
    public partial class App : Application
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(App));

        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // 配置log4net
            var log4netConfig = new FileInfo("log4net.config");
            XmlConfigurator.Configure(log4netConfig);

            AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;
            Application.Current.DispatcherUnhandledException += DispatcherUnhandledExceptionTrapper;

            // 模拟一个引发异常的操作
            int result = 1 / 0;
        }

        static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
        {
            log.Error("发生未处理的异常", (Exception)e.ExceptionObject);
            // 在此可以记录异常、通知开发人员或采取适当的措施
        }

        static void DispatcherUnhandledExceptionTrapper(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            log.Error("发生未处理的异常", e.Exception);
            // 在此可以记录异常、通知开发人员或采取适当的措施
            e.Handled = true; // 阻止应用程序崩溃
        }
    }
}

在这个示例中,我们在WPF应用程序的App类中重写OnStartup方法,配置log4net并订阅AppDomain.CurrentDomain.UnhandledException和Application.Current.DispatcherUnhandledException事件以捕获和记录异常。

3. 控制台应用程序

控制台应用程序全局异常处理方法

在控制台应用程序中,我们使用相同的方式来处理全局异常,使用AppDomain.CurrentDomain.UnhandledException事件和log4net来记录异常信息。

首先,确保您已经安装了log4net

包,可以使用NuGet Package Manager来安装。

dotnet add package log4net

然后,创建一个log4net配置文件,如前所述。

接下来,创建一个.NET Core控制台应用程序并添加log4net的配置。

using System;
using System.IO;
using log4net;
using log4net.Config;

namespace GlobalExceptionHandlingConsole
{
    class Program
    {
        private static readonly ILog log = LogManager.GetLogger(typeof(Program));

        static void Main(string[] args)
        {
            // 配置log4net
            var log4netConfig = new FileInfo("log4net.config");
            XmlConfigurator.Configure(log4netConfig);

            AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper;

            // 模拟一个引发异常的操作
            int result = 1 / 0;

            Console.WriteLine("应用程序继续执行...");
        }

        static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e)
        {
            log.Error("发生未处理的异常", (Exception)e.ExceptionObject);
            // 在此可以记录异常、通知开发人员或采取适当的措施
        }
    }
}

在这个示例中,我们首先配置log4net,然后订阅AppDomain.CurrentDomain.UnhandledException事件以捕获未处理的异常并记录它们。

使用log4net和AppDomain事件来实现全局异常处理是.NET应用程序中的一种常见做法。这允许您捕获应用程序中的异常并将其记录到日志文件中,从而更容易排查问题和监视应用程序的健康状况。无论是.NET Core、WPF还是控制台应用程序,您都可以采用类似的方法来实现全局异常处理和日志记录。

🏆欢迎关注我(Net数字智慧化基地),里面有很多高价值技术文章,是你刻苦努力也积累不到的经验,能助你升职+涨薪!!
🏆点击下方卡片关注公众号,里面有很多大佬的技术文章,能助你快速成长。还可免费领取如下15个视频教程!

回复'面试',获取C#/.NET/.NET Core面试宝典

回复'C#',领取零基础学习C#编程

回复'NET',领取.NET零基础入门到实战

回复'Linux',领取Linux从入门到精通

回复'wpf',领取高薪热门【WPF上位机+工业互联网】从零手写实战

回复'Modbus',领取初识C#+上位机Modbus通信

回复'PLC',领取C#语言与西门子PLC的通信实操

回复'blazor',领取blazor从入门到实战

回复'TypeScript',领取前端热门TypeScript系统教程

回复'vue',领取vue前端从入门到精通

回复'23P',领取C#实现23种常见设计模式

回复'MongoDB',领取MongoDB实战

回复'Trans',领取分布式事务

回复'Lock',领取分布式锁实践

回复'Docker',领取微服务+Docker综合实战

回复'K8s',领取K8s部署微服务

回复'加群',进.NET技术社区交流群 

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值