2016-03-10 17 views
9

Hiện tại trong Azure khi aa WebJob ném ngoại lệ, ngoại lệ bị bắt và xử lý bởi JobHost (bằng cách nào đó) và sau đó ghi lại ngoại lệ cho trang tổng quan có sẵn thông qua thanh công cụ Web Ứng dụng trong đó webjob được lưu trữ. Có cách nào để ngăn chặn việc xử lý lỗi hoặc ghi đè lên nó để tôi có thể cắm vào cá thể Thông tin chi tiết về ứng dụng của mình không?Làm thế nào để chặn một lỗi Azure WebJob/ngoại lệ

+0

Kiểm tra này? http://stackoverflow.com/questions/31798640/monitoring-azure-webjobs – Igorek

Trả lời

2

Hãy xem một số tài liệu azure here. Bạn có thể đính kèm một handler cho sự ngoại lệ xử lý AppDomain chưa biết (lấy từ các diễn đàn):

AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException; 

// ... 

private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) 
{ 
    ExceptionTelemetry excTelemetry = new ExceptionTelemetry((Exception)e.ExceptionObject); 
    excTelemetry.SeverityLevel = SeverityLevel.Critical; 
    excTelemetry.HandledAt = ExceptionHandledAt.Unhandled; 

    telemetryClient.TrackException(excTelemetry); 

    telemetryClient.Flush(); 
} 
+0

Thực ra tôi đã tìm thấy một cái gì đó tương tự trong các tài liệu cho Raygun. Vấn đề với cách tiếp cận này là tôi không thể đảm bảo bất kỳ số liệu hoặc thuộc tính bổ sung nào mà tôi đã tạo trong công việc được ghi lại trừ khi tôi xây dựng một số xử lý ngoại lệ rất lộn xộn cho mọi câu lệnh ném. Nếu tôi đi đến loại logic đó, tôi cũng có thể chỉ định các phương thức công việc trực tiếp –

+0

hmmm ... Tôi hiện đang nghĩ đến một số từ điển để lưu trữ các cặp khóa/giá trị có thể được lưu trữ trong một thuộc tính toàn cầu có thể được sử dụng để lưu trữ thông tin được truyền cho AI. –

+0

@AlexMarshall có đưa bạn đến DI Container trong webjob của bạn không? – Thomas

6

Bạn có thể sử dụng Azure WebJobs SDK Extensions: có một ErrorTrigger để bạn có thể sử dụng để đánh chặn unhandled trường hợp ngoại lệ:

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(); 
    } 
} 

Để đăng ký các phần mở rộng Lỗi, gọi config.UseCore() trong mã khởi động của bạn:

private static void Main() 
{ 
    var config = new JobHostConfiguration(); 
    config.UseCore(); 

    ... 
    new JobHost(config).RunAndBlock(); 
} 

Vì vậy, nếu bạn là bằng cách sử dụng một container IoC, bạn có thể dễ dàng tiêm TelemetryClient của bạn. Để cấu hình một activator việc làm cho webjob bạn có thể xem bài này:

Các vấn đề liên quan