1

Ich habe meine Azure-App-Service-Webanwendung (.Net 4.6.1) mit benutzerdefinierten TraceSources mit Trace-Switches instrumentiert, sodass ich zur Laufzeit eine detaillierte Kontrolle über mein Tracing-Volume haben kann. Nach dem Veröffentlichen auf meiner Azure-Website wird keine der Ablaufverfolgungsanweisungen in den von Azure ausgegebenen Streamingprotokollen angezeigt. Wenn ich Trace.WriteLine Anweisungen in meinen Code einfüge, sehe ich sie erscheinen.Gibt es eine Alternative zu AzureDriveTraceListener, damit TraceSource-Ereignisse in Azure-Website-Streaming-Protokollen angezeigt werden?

Trace.WriteLine("Great Success"); 
TraceSources.Session.Warn("Ultimate Failure"); 

Es gibt eine handful of articles auf dem Netz aus dem Jahr 2012 bis 2014 zurück, die zeigen, dass das Hinzufügen eines AzureDriveTraceListener Zuhörer zu meinen benutzerdefinierten Quellen werden meine Daten verursachen in den Streaming-Protokolle erscheinen, aber AzureDriveTraceListener scheint nicht zu haben Die offizielle Unterstützung von Microsoft und die Assembly Microsoft.WindowsAzure.WebSites.Diagnostics, in der sie sich befindet, sind vom Azure SDK (derzeit 2.9) oder NuGet nicht verfügbar (obwohl jemand eine Assembly unter diesem Namen veröffentlicht hat). This guy asked a similar SO question years ago, aber es ging um den Emulator.

Gibt es eine offizielle oder genehmigte Möglichkeit, in Azure-Diagnoseprotokollen die Anweisungen TraceSource.TraceEvent oder Traceinformation anzuzeigen?

Antwort

0

Gibt es eine Alternative zu AzureDriveTraceListener, damit TraceSource-Ereignisse in Azure-Website-Streaming-Protokollen angezeigt werden?

Ja, wir könnten AzureDriveTraceListener dazu verwenden. Ich mache eine Testdemo dafür. Das folgende ist mein Detail vor:

1.Erstellen ein Asp.net Projekt

2.Reference der Microsoft.WindowsAzure.WebSites.Diagnostics SDK.

3.Add die folgende Konfiguration in der Datei web.config

<system.diagnostics> 
     <sharedListeners> 
     <add name="AzureDriveTraceListener" type="Microsoft.WindowsAzure.WebSites.Diagnostics.AzureDriveTraceListener, Microsoft.WindowsAzure.WebSites.Diagnostics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> 
     </sharedListeners> 
     <sources> 
     <source name="TraceSourceLogging" switchName="TestSwitch" switchType="System.Diagnostics.SourceSwitch"> 
      <listeners> 
      <add name="AzureDriveTraceListener"/> 
      </listeners> 
     </source> 
     </sources> 
     <switches> 
     <add name="TestSwitch" value="Verbose" /> 
     </switches> 
    </system.diagnostics> 

4.Add eine AppTrace Klasse im Projekt konnten wir die Demo-Code aus dem blog

public static class AppTrace 
    { 
     public static TraceSource TraceSource { get; set; } 

     static AppTrace() 
     { 
      TraceSource = new TraceSource("TraceSourceLogging") 
      { 
       Switch = {Level = (SourceLevels) Enum.Parse(typeof(SourceLevels), "All", true)} 
      }; 
     } 

     private static string Format(string message, string memberName, string filePath, int lineNumber) 
     { 
      return $"Message: {message}, MemberName: {memberName}, FilePath: {filePath}, LineNumber: {lineNumber}"; 
     } 
     public static void Verbose(string message, int id = 16, [CallerMemberName] string memberName = "", 
      [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Verbose, id, Format(message, memberName, filePath, lineNumber)); 
     } 

     public static void Error(string message, int id = 2, [CallerMemberName] string memberName = "", 
      [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Error, id, Format(message, memberName, filePath, lineNumber)); 
     } 

     public static void Information(string message, int id = 8, [CallerMemberName] string memberName = "", 
      [CallerFilePath] string filePath = "", [CallerLineNumber] int lineNumber = 0) 
     { 

      TraceSource.TraceEvent(TraceEventType.Information, id, Format(message, memberName, filePath, lineNumber)); 
     } 
     public static void Critical(string message, int id = 1, [CallerMemberName]string memberName = 
      "", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Critical, id, Format(message, memberName, filePath, lineNumber)); 
     } 

     public static void Warning(string message, int id = 4, [CallerMemberName]string memberName = 
      "", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Warning, id, Format(message, memberName, filePath, lineNumber)); 
     } 

     public static void Start(string service, int id = 256, [CallerMemberName]string memberName = 
      "", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Start, id, Format("Starting - " + service, memberName, filePath, lineNumber)); 
     } 

     public static void Stop(string service, int id = 512, [CallerMemberName]string memberName = 
      "", [CallerFilePath] string filePath = "", [CallerLineNumber]int lineNumber = 0) 
     { 
      TraceSource.TraceEvent(TraceEventType.Stop, id, Format("Stoping - " + service, memberName, filePath, lineNumber)); 
     } 
    } 

5 erhalten .Fügen Sie eine Testseite hinzu.

protected void Page_Load(object sender, EventArgs e) 
    { 

     AppTrace.Verbose("Test Verbose"); 
     AppTrace.Error("Test Error"); 
     AppTrace.Warning("Test Warning"); 
     AppTrace.Information("Test Information"); 
     AppTrace.Critical("Test Critical"); 

     Label1.Text = "Completed"; 

    } 

6.Veröffentlichen Sie das Projekt mit Azure.

7.Visit die Seite und überprüfen Sie es von Azure-Portal

enter image description here

+0

Danke Tom Sun. Ich weiß, dass es funktioniert, aber Microsoft hat keine offizielle Dokumentation für AzureDriveTraceListener, die ich finden kann, also frage ich mich, ob es sicher ist, diese undokumentierte Funktion zu verwenden. Es ist auch nicht für das lokale Debuggen geeignet, daher ist es nur eine Option, dies in einer Release-Transformation hinzuzufügen. Diese Frage wurde in der einen oder anderen Form seit 5 Jahren gestellt und hätte erwartet, dass etwas Offizielles von MS darüber erfahren würde, wie dies zu erreichen ist. – Josh

+0

Das NuGet-Paket, mit dem Sie verknüpft haben, befindet sich ebenfalls im Microsoft-Namespace, aber es handelt sich nicht um ein Microsoft-Release. Ich persönlich lade niemals etwas von Nuget herunter, das behauptet, ein Microsoft-Paket zu sein, wird aber nicht von einer offiziellen Microsof-Quelle veröffentlicht. – Josh

+0

Aus dem Link [nuget License] (https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE) , wir könnten wissen, dass die Kopie rechts von sdk Microsoft ist, so dass Sie einfach zu bedienen sind. –

Verwandte Themen