我的解决方案中有几个项目,其中大部分是windows服务。我为每个用户配置了log4net (为每个日志文件生成一个单独的日志文件),以及为log4net配置了Raygun。我想为每个项目捕获UnhandledException,并了解它们的来源(包括日志文件和射线枪仪表板),我想在我的解决方案中的所有项目中都在一个地方这样做。
因此,我创建了一个单独的静态类和方法来记录这些异常。
静态类:
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);
}
}视窗服务:
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;
}发布于 2015-02-18 11:39:07
除了在事件处理程序中使用堆栈上的反射之外,无法获得未处理异常的类名,在发布版构建中,这并不保证会给出类名。
在Windows中,未处理的异常应该是例外的,并具有正确的错误处理:将Main代码包装在try..catch子句中,并在服务代码中可能发生的任何地方捕获异常。如果仍然发生未处理的异常,则至少可以使用堆栈跟踪,这将允许您识别异常的来源。
https://stackoverflow.com/questions/28574874
复制相似问题