2011-07-20 15 views
6

Używamy DiagnosticMonitorTraceListener jako ogólny słuchacza śledzenia (głównie dla Monitorowania ASP.NET Zdrowie), jak również Enterprise Library 5 słuchacza do obsługi wyjątków. Działa to dobrze podczas działania na platformie Azure, ale ważne jest, aby móc uruchomić witrynę poza platformą Azure przy minimalnych zmianach.Running With DiagnosticMonitorTraceListener Poza Azure Compute Emulator

Jedną z opcji jest, aby zarejestrować go dynamicznie, co następuje:

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

Działa to na monitorowanie ASP.NET Zdrowie i ogólnych zastosowań System.Diagnosics ale nie dla Enterprise Library, gdzie mamy następujący sprzęt komputerowy kodowane konfiguracja:

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

Lewy nieuwzględnione wzywa do ExceptionPolicy.HandleException wygeneruje:

Nie działa w hostowanej usłudze lub w produkcie deweloperskim.

Aby usunąć ten warunkowo na podstawie których aplikacja jest uruchomiona, możemy korzystać z konfiguracji biegle API dla EL5 ale musiałby przepisać naszą konfigurację (to wszystko albo nic).

Możemy również użyć transformacji web.config poza tym, że oprócz 3 różnych konfiguracji rozwiązania (np. Dev, inscenizacja, produkcja), musielibyśmy wprowadzić czwartą, aby odróżnić dev-standalone od dev -lazur.

Jedną z ostatnich opcji jest utworzenie niestandardowego detektora, który spowoduje przekierowanie wszystkich wiadomości do ** ** (jeśli działa na platformie Azure) lub nie robi nic.

Jakieś inne sugestie?

FYI, Monitoring ASP.NET zdrowie jest skonfigurowany w następujący sposób:

<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> 

Odpowiedz

2

Można utworzyć DiagnosticMonitorTraceListener a następnie dodać go do kolekcji TraceSources dla swojej kategorii.

Usuń Azure Diagnostics śledzenia Listener od konfiguracji EntLib:

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

a następnie użyć poniższy kod, aby dodać go w czasie wykonywania:

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