2011-07-20 12 views
6

Stiamo utilizzando DiagnosticMonitorTraceListener come un listener di analisi generale (soprattutto per per ASP.NET Monitoraggio dello), così come un Enterprise Library 5 listener per la gestione delle eccezioni. Funziona bene quando si esegue su Azure, ma è importante poter eseguire il sito Web all'esterno di Azure con modifiche minime.Running With DiagnosticMonitorTraceListener Al di fuori di Azure Compute Emulator

Una possibilità è quella di registrare in modo dinamico come segue:

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

Questo funziona per ASP.NET Monitoraggio dello e gli usi generali della System.Diagnosics ma non per Enterprise Library dove abbiamo il seguente hardware configurazione coded: senza indirizzo

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

sinistra, le chiamate verso ExceptionPolicy.HandleException genererà:

Non in esecuzione in un servizio ospitato o nella struttura di sviluppo.

Per rimuovere in modo condizionale questo in base a dove è in esecuzione l'app, potremmo utilizzare l'API di configurazione fluente per EL5, ma dovremmo riscrivere la nostra configurazione (è tutto o niente).

Potremmo anche utilizzare le trasformazioni di web.config eccetto che, oltre ad avere già 3 diverse configurazioni di soluzioni (ad esempio, dev, staging, produzione), dovremmo introdurre un 4 ° per distinguere tra dev-standalone vs. dev -azzurro.

Un'ultima opzione sarebbe semplicemente creare un listener personalizzato che instraderà tutti i messaggi a ** ** (se in esecuzione su Azure) o non eseguirà nulla.

Altri suggerimenti?

FYI, monitoraggio ASP.NET Salute è configurato come segue:

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

risposta

2

è possibile creare un DiagnosticMonitorTraceListener e quindi aggiungerlo alla raccolta di TraceSources per la vostra categoria.

Rimuovere Azure Diagnostica Traccia Listener dalla configurazione EntLib:

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

e quindi utilizzare il codice qui sotto per aggiungerlo in fase di esecuzione:

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