在 C# 中将所有异常发送到服务器
Send all Exceptions to Server in C#
我想过将程序中产生的所有异常发送到服务器,但没有找到好的解决方案。我的想法是创建一个基础 class,它在构造函数中将异常添加到队列中。发件人确实在队列中等待并将所有已注册的异常发送到服务器。
但是在注册异常时,构造函数尚未完成,这意味着在将其发送到服务器时可能并非所有值都已设置。等待一定数量的 ms 是一个好的解决方案,还是有更好的方法来收集所有异常,不需要我为每个 exception/catch 手动执行?
应该使用什么类型的连接?建立一个 tpc 连接是昂贵的,我应该实现一个简单的基于 UDP 的协议,还是太过分了?
最好使用现有的而不是编写自定义错误捕获器。使用 nlog 风格的解决方案使项目更加通用。
您可以查看 Jason Taylor 撰写的有关如何执行此操作的文章。这是他的 github 源代码 link.
我也为你写了一个简化的例子。希望这有帮助。
异常过滤器:
using Microsoft.AspNetCore.Mvc.Filters;
namespace Multitrust.API.Filters
{
public class ApiExceptionFilter : ExceptionFilterAttribute
{
public ApiExceptionFilter()
{
}
public override void OnException(ExceptionContext context)
{
HandleException(context);
}
private void HandleException(ExceptionContext context)
{
//This will catch all exceptions, you can them log them here. I recommend using serilog.
}
}
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(options =>
options.Filters.Add(new ApiExceptionFilter()));
//Bind other services...
}
如果您需要任何帮助,请告诉我。
编码愉快!
我想过将程序中产生的所有异常发送到服务器,但没有找到好的解决方案。我的想法是创建一个基础 class,它在构造函数中将异常添加到队列中。发件人确实在队列中等待并将所有已注册的异常发送到服务器。 但是在注册异常时,构造函数尚未完成,这意味着在将其发送到服务器时可能并非所有值都已设置。等待一定数量的 ms 是一个好的解决方案,还是有更好的方法来收集所有异常,不需要我为每个 exception/catch 手动执行? 应该使用什么类型的连接?建立一个 tpc 连接是昂贵的,我应该实现一个简单的基于 UDP 的协议,还是太过分了?
最好使用现有的而不是编写自定义错误捕获器。使用 nlog 风格的解决方案使项目更加通用。
您可以查看 Jason Taylor 撰写的有关如何执行此操作的文章。这是他的 github 源代码 link.
我也为你写了一个简化的例子。希望这有帮助。
异常过滤器:
using Microsoft.AspNetCore.Mvc.Filters;
namespace Multitrust.API.Filters
{
public class ApiExceptionFilter : ExceptionFilterAttribute
{
public ApiExceptionFilter()
{
}
public override void OnException(ExceptionContext context)
{
HandleException(context);
}
private void HandleException(ExceptionContext context)
{
//This will catch all exceptions, you can them log them here. I recommend using serilog.
}
}
}
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(options =>
options.Filters.Add(new ApiExceptionFilter()));
//Bind other services...
}
如果您需要任何帮助,请告诉我。
编码愉快!