2011-07-20 32 views
6

Chúng tôi đang sử dụng DiagnosticMonitorTraceListener như một dấu vết người nghe chung (chủ yếu cho cho ASP.NET Sức khỏe Giám sát) cũng như một doanh nghiệp Thư viện 5 người nghe để xử lý ngoại lệ. Điều này hoạt động tốt khi chạy trên Azure nhưng điều quan trọng là chúng tôi có thể chạy trang web bên ngoài Azure với những thay đổi tối thiểu.Chạy Với DiagnosticMonitorTraceListener Ngoài Azure Tính Emulator

Một lựa chọn là để đăng ký nó tự động như sau:

protected void Application_Start() 
{ 
    if (Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable) 
    { 
     System.Diagnostics.Trace.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener()); 
     System.Diagnostics.Trace.AutoFlush = true; 
    } 
} 

này làm việc cho ASP.NET Sức khỏe Giám sát và sử dụng chung của System.Diagnosics nhưng không phải cho doanh nghiệp Thư viện nơi chúng tôi đã sau hard- cấu hình mã hóa:

<categorySources> 
    <add switchValue="All" name="General"> 
     <listeners> 
     <add name="Event Log Listener" /> 
     <add name="Azure Diagnostics Trace Listener" /> 
     </listeners> 
    </add> 
    </categorySources> 

Left unaddressed, các cuộc gọi đến ExceptionPolicy.HandleException sẽ tạo ra:

Không chạy trong dịch vụ được lưu trữ hoặc Vải phát triển.

Để có điều kiện loại bỏ điều này dựa trên nơi ứng dụng đang chạy, chúng tôi có thể sử dụng API cấu hình thông thạo cho EL5 nhưng sẽ phải viết lại cấu hình của chúng tôi (tất cả hoặc không có gì). Chúng tôi cũng có thể sử dụng chuyển đổi web.config ngoại trừ việc, ngoài việc có 3 cấu hình giải pháp khác nhau đã có (ví dụ: dev, dàn dựng, sản xuất), chúng tôi sẽ phải giới thiệu số 4 để phân biệt giữa dev-standalone so với dev thật tuyệt vời.

Một tùy chọn cuối cùng là chỉ tạo trình nghe tùy chỉnh sẽ định tuyến tất cả thư đến ** ** (nếu chạy trên Azure) hoặc không làm gì cả.

Bất kỳ đề xuất nào khác?

FYI, Giám sát ASP.NET sức khỏe được cấu hình như sau:

<healthMonitoring enabled="true"> 
    <providers> 
    <add name="TraceWebProvider" type="System.Web.Management.TraceWebEventProvider" /> 
    </providers> 
    <rules> 
    <add name="Application Events" 
     eventName="Application Lifetime Events" 
     provider="TraceWebProvider" 
     profile="Default" 
     minInstances="1" 
     maxLimit="Infinite" 
     minInterval="00:01:00" /> 
    </rules> 
</healthMonitoring> 

Trả lời

2

Bạn có thể tạo một DiagnosticMonitorTraceListener và sau đó thêm nó vào bộ sưu tập của TraceSources gì cho Chuyên mục của bạn.

Di Azure Chẩn đoán vết Listener từ cấu hình EntLib:

<categorySources> 
    <add switchValue="All" name="General"> 
     <listeners> 
     <add name="Event Log Listener" /> 
     </listeners> 
    </add> 
    </categorySources> 

Và sau đó sử dụng mã dưới đây để thêm nó khi chạy:

protected void Application_Start() 
{ 
    if (Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.IsAvailable) 
    { 
     LogSource logSource; 
     Logger.Writer.TraceSources.TryGetValue("General", out logSource); 
     logSource.Listeners.Add(new Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener()); 
    } 
} 
Các vấn đề liên quan