log4net 记录来自不同项目的 UnhandledException 异常
log4net logging UnhandledException exceptions from different projects
我的解决方案中有几个项目,其中大部分是 windows 服务。我为每个配置了 log4net(为每个生成一个单独的日志文件),以及用于 log4net 的 Raygun appender。我想为每个项目捕获 UnhandledException 并了解它们的来源(在日志文件和 raygun 仪表板中),我想在一个地方为我的解决方案中的所有项目执行此操作。
因此,我创建了一个单独的静态 class 和方法来记录这些异常。
如何记录异常,以便我的日志文件显示生成该错误的 class 而不是 Logger static class(以及 raygun.io 仪表板显示异常的正确来源)=>
Logger.UnhandledException [错误]- 现在这是错误的。它应该是 class 异常起源的名称
我会为此创建一个线程安全的单例吗?这是正确的方法吗?
静态class:
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);
}
}
Windows 服务:
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;
}
无法获得未处理异常发生位置的 class 名称,除非在事件处理程序中使用堆栈上的反射,这在发布版本中不能保证为您提供class 无论如何名字。
未处理的异常在 Windows 服务中应该是 异常,并具有适当的错误处理:将您的 Main
代码包装在 try..catch
子句中,并在服务代码中可能发生的任何地方捕获异常。如果未处理的异常仍然发生,您至少可以使用堆栈跟踪,这将使您能够确定异常的来源。
我的解决方案中有几个项目,其中大部分是 windows 服务。我为每个配置了 log4net(为每个生成一个单独的日志文件),以及用于 log4net 的 Raygun appender。我想为每个项目捕获 UnhandledException 并了解它们的来源(在日志文件和 raygun 仪表板中),我想在一个地方为我的解决方案中的所有项目执行此操作。
因此,我创建了一个单独的静态 class 和方法来记录这些异常。
如何记录异常,以便我的日志文件显示生成该错误的 class 而不是 Logger static class(以及 raygun.io 仪表板显示异常的正确来源)=>
Logger.UnhandledException [错误]- 现在这是错误的。它应该是 class 异常起源的名称
我会为此创建一个线程安全的单例吗?这是正确的方法吗?
静态class:
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);
}
}
Windows 服务:
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;
}
无法获得未处理异常发生位置的 class 名称,除非在事件处理程序中使用堆栈上的反射,这在发布版本中不能保证为您提供class 无论如何名字。
未处理的异常在 Windows 服务中应该是 异常,并具有适当的错误处理:将您的 Main
代码包装在 try..catch
子句中,并在服务代码中可能发生的任何地方捕获异常。如果未处理的异常仍然发生,您至少可以使用堆栈跟踪,这将使您能够确定异常的来源。