我运行Exceptionless项目,我们有一些客户使用ServiceStack,我有一些问题和建议您的错误处理。目前,你们不会将异常流向asp.net核心中间件或任何diagnostics integrations,这是一个问题。有一个报告这些钩子的包可能会很好。相反,你吃了所有的例外,并调用两个处理程序之一:
ServiceExceptionHandlers.Add((httpReq, request, exception) => {
var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("ServiceExceptionHandlers");
exception.ToExceptionless(contextData).Submit(); // TODO: figure out how to get the http context here for extra metadata.
return null; //continue with default Error Handling
});
//Handle Unhandled Exceptions occurring outside of Services
//E.g. Exceptions during Request binding or in filters:
UncaughtExceptionHandlers.Add((req, res, operationName, ex) => {
var contextData = new ContextData();
contextData.MarkAsUnhandledError();
contextData.SetSubmissionMethod("UncaughtExceptionHandlers");
ex.ToExceptionless(contextData).SetProperty("Operation", operationName).Submit(); // TODO: figure out how to get the http context here for extra metadata.
// TODO: See if we have to do this,, rather just fallback and let them handle it.
res.Write("Error: {0}: {1}".Fmt(ex.GetType().Name, ex.Message));
res.EndRequest(skipHeaders: true);
});
你可以看到我不想打断我想记录并继续的任何工作流程......有没有一个好方法可以实现这个目标?
此外,我如何才能访问http上下文(您传入请求,响应和异常,但没有其他内容)。我知道它已被抽象出来了,这里没有任何上下文,也许可能有一些属性我可以查看来获取上下文?我想要这个,所以我可以捕获更多的元数据(请求,用户等...)
答案 0 :(得分:3)
请注意,您的问题似乎直接针对ServiceStack,但它已发布在公共StackOverflow论坛上,应该解决并向愿意提供帮助的任何人开放。
我不想打断任何我想记录并继续
的工作流程
如果您不想中断null
中的工作流程返回ServiceExceptionHandlers
,请不要在UncaughtExceptionHandlers
中写入或终止回复,即:
//res.Write("Error: {0}: {1}".Fmt(ex.GetType().Name, ex.Message));
//res.EndRequest(skipHeaders: true);
如何访问http上下文
您可以通过以下方式获取基础.NET核心请求:
var origReq = req.OriginalRequest as HttpRequest;
var httpCtx = origReq.HttpContext;
与响应相同:
var origRes = res.OriginalResponse as HttpResponse;