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