2011-03-08 19 views
19

Bạn có nói this là cách tối ưu nhất để thực hiện ghi nhật ký truyền thống đơn giản trong ứng dụng Azure được triển khai?Cách đăng nhập ưu tiên .Net được triển khai sang Azure

Nếu cảm thấy như rất nhiều công việc để thực sự truy cập các tệp, v.v ...

Điều gì làm việc tốt nhất cho bạn?

+1

có thể [tốt nhất thực hành-cho-đăng nhập-và-truy tìm-trong-net] (http://programmers.stackexchange.com/questions/57064/best-practices-for-logging-and-tracing-in- net /) tại programmers.stackexchange cũng hữu ích – k3b

Trả lời

8

Chúng tôi sử dụng bản dựng trong chẩn đoán ghi vào lưu trữ Bảng Azure. Bất cứ khi nào chúng ta cần một thông điệp được viết vào nhật ký, nó chỉ là một "Trace.WriteLine (...)".

Vì nhật ký được ghi vào Bộ nhớ bảng Azure, chúng tôi có quy trình sẽ tải xuống thông báo tường trình và xóa chúng khỏi bộ nhớ bảng. Điều này làm việc tốt cho chúng tôi, nhưng tôi nghĩ rằng nó có thể phụ thuộc vào ứng dụng.

http://msdn.microsoft.com/en-us/library/gg433048.aspx

Hy vọng điều đó sẽ hữu ích!

[Cập nhật]

public void GetLogs() { 
     int cnt = 0; 
     bool foundRows = false; 
     var entities = context.LogTable; 
     while (1 == 1) { 
      foreach (var en in entities) { 
       processLogRow(en); 
       context.DeleteObject(en); 
       cnt++; 
       try { 
        if (cnt % 100 == 0) { 
         foundRows = true; 
         context.SaveChanges(SaveChangesOptions.Batch); 
        } 
       } catch (Exception ex) { 
        Console.WriteLine("Exception deleting batch. {0}", ex.Message); 
       } 
      } 
      if (!foundRows) 
       break; 
      else { 
       context.SaveChanges(SaveChangesOptions.Batch); 
      } 
      foundRows = false; 
     } 
     Console.WriteLine("Done! Total Deleted: {0}", cnt); 
    } 
+0

Bất kỳ cơ hội nào mà mã tải xuống được đăng ở đâu đó? Tôi chỉ chuẩn bị làm một việc tương tự. –

+1

Mã đầy đủ không được đăng ở bất kỳ đâu, nhưng tôi sẽ cập nhật bài đăng này bằng vòng lặp chính tải xuống nhật ký. Điều này sẽ cung cấp cho bạn một ý tưởng về cách nó hoạt động. – Brosto

+0

Câu trả lời này chỉ đề cập đến một cách để tấn công vấn đề. Thông thường, bạn sẽ đăng nhập vào đĩa trong một thời trang lăn chỉ để giữ dữ liệu mới nhất, và cũng đăng nhập vào tài khoản lưu trữ Azure mà không thể cuộn dữ liệu hiện tại. Hơn nữa, hiện tại, bạn nên sử dụng EventSource (ETW) thay vì Systems.Diagnostics.Trace vì bạn có thể kiểm soát định dạng cũng như thông qua ETW. – user3613932

6

Thêm một chút để trả lời Brosto của: Nó chỉ mất một vài dòng mã để cấu hình Azure Diagnostics. Bạn quyết định mức độ nào bạn muốn nắm bắt (tiết, thông tin, v.v.). và tần suất bạn muốn đẩy thông điệp nhật ký được lưu trữ cục bộ vào bộ nhớ Azure (tôi thường đi với khoảng 15 phút). Thông điệp tường trình từ tất cả các cá thể của bạn sau đó được tổng hợp thành cùng một bảng, dễ truy vấn (hoặc có thể tải xuống), với các thuộc tính xác định vai trò và cá thể.

Có thêm báo cáo dấu vết, như Trace.TraceError(), Trace.TraceWarning(), vv

Bạn thậm chí có thể tạo ra một dấu vết người nghe và xem dữ liệu ghi nhận của bạn trong hầu hết thời gian thực-trên máy tính địa phương của bạn . Azure AppFabric SDK Mẫu zip chứa mẫu (trong \ ServiceBus \ Scenarios \ CloudTrace) để thực hiện việc này.

2

Như đã được đề cập, sử dụng Windows Azure Diagnostics là cách để thực hiện. Tuy nhiên, tất cả việc đăng nhập từ tất cả các phiên bản của bạn sẽ kết thúc trong một danh sách lớn, có thể khó đọc qua. Vì vậy, tôi cố gắng chỉ gửi các thông điệp tương đối quan trọng (mức Cảnh báo và cao hơn) đến các bảng chẩn đoán. Mặc dù vậy nó là một nỗi đau để đọc bảng trực tiếp. Có một vài công cụ hiện có, cá nhân tôi sử dụng Cerebrata Diagnostics Manager.

Mặc dù việc sử dụng chức năng theo dõi trực tiếp hoạt động tốt, tôi khuyên bạn nên sử dụng khung ghi nhật ký như NLog hoặc log4net. Điều đó mang lại cho bạn sự linh hoạt hơn một chút để gửi một số thư Trace/Azure Diagnostics và các thư khác tới bộ nhớ cục bộ.

Ví dụ: tôi đã thêm một tấn ghi nhật ký theo dõi để theo dõi vấn đề treo luồng. Tôi thấy rằng việc tạo một đường dẫn tệp gốc tương đối như "\ ServiceLogs \ MyLog.txt" sẽ xuất ra ổ đĩa F: trên cá thể. Vì vậy, tôi định tuyến tất cả điều đó cho hệ thống tệp cá thể, thay vì các bảng Chẩn đoán. Bạn phải từ xa vào từng trường hợp để xem các nhật ký đó, nhưng trong trường hợp này, đó là một giao dịch tốt.

4

Đối với lỗi đăng nhập là giải pháp tốt nhất mà tôi nhìn thấy là Elmah. Nó đòi hỏi cơ sở dữ liệu SQL, nhưng đây là công cụ loggin lỗi thực sự giúp chẩn đoán các vấn đề.Nó hoạt động tốt trên Azure.

+2

Bạn có thể cấu hình ELMAH để làm việc với Bộ nhớ bảng. Xem ví dụ http://www.wadewegner.com/2011/08/using-elmah-in-windows-azure-with-table-storage/ – Sam

3

Đối với tất cả các trang web Azure của tôi, tôi sử dụng ghi nhật ký tùy chỉnh vào bảng Azure. Mặc dù công việc nhiều hơn một chút, tôi thấy nó giúp tôi kiểm soát nhiều hơn thông tin được lưu trữ. Giống như Brosto ở trên đã nhận xét, tốt nhất là nên có quy trình cục bộ để tải xuống các nhật ký định kỳ vào hệ thống cục bộ của bạn. Nếu bạn lấy được một lớp từ TableServiceEntity, bạn có thể định nghĩa một cấu trúc chứa tất cả các trường bạn muốn đăng nhập và sử dụng cùng một lớp để truy xuất dữ liệu trong ứng dụng cục bộ của bạn để truy xuất nhật ký. Tôi duy trì một số ví dụ về mã để làm điều này trên trang logging using Azure table storage của mình nếu đó là bất kỳ trợ giúp nào cho bất kỳ ai.

Một trong những vấn đề tôi gặp phải khi sử dụng phương pháp Trace.Writeline là nhật ký được lưu trữ trên cá thể cục bộ và được chuyển định kỳ sang bộ nhớ bảng Azure. Do tính chất thoáng qua của một cá thể Azure, tất cả lưu trữ cục bộ phải được coi là tạm thời ở mức tốt nhất. Do đó luôn có một cửa sổ để mất dữ liệu nhật ký của bạn trong khi nó được giữ trên ổ đĩa cục bộ.

Với chi phí giao dịch lưu trữ bảng Azure, ghi nhật ký trực tiếp vào bộ lưu trữ Azure là cực kỳ hiệu quả về chi phí. Nếu hiệu suất là một vấn đề lớn đối với bạn, nó có thể là đáng giá cống hiến một chủ đề riêng biệt (hoặc chủ đề) để phục vụ một hàng đợi được tổ chức bộ nhớ của dữ liệu đăng nhập. Mặc dù điều này rõ ràng cho các vấn đề tương tự với dữ liệu thoáng qua nếu thể hiện Azure được tái chế, cửa sổ cho điều này xảy ra sẽ nhỏ hơn nhiều.

0

Trong khi không phải khung khai thác truyền thống, Story framework thực sự có thể trợ giúp khi bạn thực sự muốn đọc nhật ký của mình, "làm" bạn viết tất cả nhật ký (và thêm thông tin có liên quan khác) trong ngữ cảnh, khi bạn cần đọc nó sau tất cả mọi thứ bạn cần.

Nó cũng hỗ trợ lưu trữ nhật ký vào bộ nhớ Bảng Azure.

Có thêm thông tin và mẫu trên this blog post.

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