首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >log4net记录不同项目的UnhandledException异常

log4net记录不同项目的UnhandledException异常
EN

Stack Overflow用户
提问于 2015-02-18 02:17:48
回答 1查看 1.3K关注 0票数 2

我的解决方案中有几个项目,其中大部分是windows服务。我为每个用户配置了log4net (为每个日志文件生成一个单独的日志文件),以及为log4net配置了Raygun。我想为每个项目捕获UnhandledException,并了解它们的来源(包括日志文件和射线枪仪表板),我想在我的解决方案中的所有项目中都在一个地方这样做。

因此,我创建了一个单独的静态类和方法来记录这些异常。

  • 如何记录异常,以便日志文件显示生成该错误的类,而不是Logger静态类(以及让raygun.io仪表板显示异常的正确来源) => Logger.UnhandledException错误--这现在是错误的。它应该是异常起源地的类名。
  • 我会为此创建一个线程安全的单例吗?这就是正确的方法吗?

静态类:

代码语言:javascript
复制
public static class Logger
{
    private static readonly ILog Log = LogManager.GetLogger(Assembly.GetEntryAssembly().FullName);

    public static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
    {
        Log.Error(e);
    }
}

视窗服务:

代码语言:javascript
复制
private static void Main(string[] args)
{

        Configure.Serialization.Xml();

        // Unhandled exceptions - subscribe to the event (I would do this to all my projects in the solution)
        AppDomain.CurrentDomain.UnhandledException += Logger.UnhandledException;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-18 11:39:07

除了在事件处理程序中使用堆栈上的反射之外,无法获得未处理异常的类名,在发布版构建中,这并不保证会给出类名。

在Windows中,未处理的异常应该是例外的,并具有正确的错误处理:将Main代码包装在try..catch子句中,并在服务代码中可能发生的任何地方捕获异常。如果仍然发生未处理的异常,则至少可以使用堆栈跟踪,这将允许您识别异常的来源。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28574874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档