C# 如何拦截Azure WebJob失败/异常
当前在Azure中,当WebJob引发异常时,异常会被C# 如何拦截Azure WebJob失败/异常,c#,azure,azure-webjobs,azure-application-insights,C#,Azure,Azure Webjobs,Azure Application Insights,当前在Azure中,当WebJob引发异常时,异常会被作业主机捕获并处理(以某种方式),然后将异常记录到仪表板,该仪表板可通过承载WebJob的Web应用的刀片服务器访问。是否有任何方法可以截获或覆盖错误处理,以便插入Application Insights实例?查看一些azure文档。您可以将处理程序附加到处理未知异常的AppDomain(取自上面的链接): 您可以使用:有一个错误触发器,以便您可以使用来拦截未处理的异常: public class UnhandledErrorTrigger
作业主机捕获并处理(以某种方式),然后将异常记录到仪表板,该仪表板可通过承载WebJob的Web应用的刀片服务器访问。是否有任何方法可以截获或覆盖错误处理,以便插入Application Insights实例?查看一些azure文档。您可以将处理程序附加到处理未知异常的AppDomain
(取自上面的链接):
您可以使用:有一个错误触发器
,以便您可以使用来拦截未处理的异常:
public class UnhandledErrorTrigger : IDisposable
{
private readonly TelemetryClient _telemetryClient;
public UnhandledErrorTrigger(TelemetryClient telemetryClient)
{
_telemetryClient = telemetryClient;
}
public void UnHandledException([ErrorTrigger("0:01:00", 1)] TraceFilter filter, TextWriter log)
{
foreach (var traceEvent in filter.Events)
{
_telemetryClient.TrackException(traceEvent.Exception);
}
// log the last detailed errors to the Dashboard
log.WriteLine(filter.GetDetailedMessage(1));
}
public void Dispose()
{
_telemetryClient.Flush();
}
}
要注册错误扩展,请在启动代码中调用config.UseCore()
:
private static void Main()
{
var config = new JobHostConfiguration();
config.UseCore();
...
new JobHost(config).RunAndBlock();
}
因此,如果您使用的是IoC容器,则可以轻松地注入遥测客户端。要为webjob配置作业激活器,您可以查看以下文章:
检查这个?事实上,我在Raygun的文件中找到了类似的东西。这种方法的问题在于,除非我为每个可能的throw语句构建了一些非常混乱的异常处理,否则我无法保证在作业期间建立的任何度量或额外属性都会被记录下来。如果我要讨论我们的这种逻辑,我还不如直接将作业方法插入仪器。。。我目前正在考虑使用一些字典来存储键/值对,这些键/值对可以存储在一个全局属性中,该属性可以用来存储要传递给AI的信息。@Alexall您的webjob中是否有DI容器?是的,我有。我们目前正在使用Ninject@AlexMarshall,我添加了一个关于ErrorTrigger的答案
private static void Main()
{
var config = new JobHostConfiguration();
config.UseCore();
...
new JobHost(config).RunAndBlock();
}