Bearbeiten

Freigeben über


Protokollierung in Gridwich

Azure

Dies sind bewährte Methoden für die Protokollierung:

  • Verwenden Sie keine Zeichenfolgenformatierung oder Interpolation. Das Protokollieren einer Zeichenfolge mit $"This broke {brokenThing}" ist für das Debuggen nicht nützlich.

  • Übergeben Sie Objekte, sodass diese zu durchsuchbaren Feldern werden.

    Verwenden Sie anstelle von LogInformation(LogEventIds.StartProcessing, $"Processing has started on item {Item.itemNumber}"); Folgendes:

    • ein Objekt (z. B. LogInformationObject(LogEventIds.StartProcessing, Item);) oder
    • anonyme Objekte (z. B. LogInformationObject(LogEventIds.StartProcessing, new {Item.itemNumber, Item.itemDescription, someData});)
  • Befolgen Sie die in LogEventIds beschriebenen EventId-Nummerierungskonventionen.

  • Verwenden Sie für jeden wichtigen Arbeitsschritt das folgende Protokollierungsmuster:

    • Verwenden Sie LogInformationObject für den Eintrag, wenn Sie beispielsweise mit einem Codierungsauftrag beginnen.
    • Verwenden Sie LogInformationObject bei Erfolgen, beispielsweise wenn der Codierungsauftrag erfolgreich ist.
    • Verwenden Sie LogWarningObject, LogErrorObject oder LogCriticalObject bei Fehlern, beispielsweise wenn beim Codierungsauftrag ein Fehler auftritt. Verwenden Sie ggf. Varianten der Exception-Methode.
  • Obwohl Sie Informationen in jeder beliebigen Phase protokollieren können, sollten die Protokolle keine überflüssigen Elemente beinhalten.

ObjectLogger

ObjectLogger mit IObjectLogger ist ein kleines Wrapperdienstprogramm für die Standardprotokollierung/ILogger. Dieses Einzeilerhilfsprogramm protokolliert jedes C#-Objekt, indem C#-Objekte in Wörterbuchobjekte konvertiert werden, die von der Protokollierung verwendet werden können.

ObjectLogger bzw. IObjectLogger schränkt die Verwendung von Protokollierungsmethoden ein, die nicht über EventIds verfügen, indem anstelle einer Vererbung ein Adaptermuster verwendet wird. Diese Einschränkung zwingt Entwickler, EventIds zu verwenden, die für das Debuggen nützlich sind.

Dies sind weitere Empfehlungen für die Verwendung von ObjectLogger:

  • Umgehen Sie IObjectLogger nicht, indem Sie ILogger verwenden.
  • Verwenden Sie IObjectLogger mit dem richtigen Typ für die Klasse: IObjectLogger<myClass>.
  • Verwenden Sie in jedem catch-Block für die Ausnahmebehandlung IObjectLogger-Methoden, die Ausnahmen umfassen. Protokollanbieter wie Application Insights können die Ausnahmeinformationen nutzen.

Protokollierungsschema und -daten

Die zugrunde liegende Event Grid-Runtimeinfrastruktur bietet ein Basisschema. Das Event Grid-Ereignisschema umfasst den Zeitpunkt des Ereignisses, das Ursprungsgerät, den Schweregrad und die Zeichenfolgennachricht. Die benutzerdefinierten Standardeigenschaften für die Protokollierung/ILogger sind EventId, Category und RequestPath.

Kontextobjekte

Sie können ein Kontextobjekt erstellen, das eine Eigenschaftensammlung wichtiger Variablen ist, die von Ihrem Code übergeben oder generiert werden können, um mit komplexen APIs und Workflows arbeiten zu können, die wiederum mehrere Eingaben und Ausgaben erfordern. Kontextobjekte können viele Parameter umfassen, und Methodensignaturen müssen nicht geändert werden, wenn Sie Parameter hinzufügen oder entfernen. Sie können Kontextobjekte auch als Einheit an die Protokollierung und andere Schnittstellen übergeben.

Verwenden Sie anstelle von

var store = new StorageBlob();
var tier = req.Query["tier"];
var result = await store.SetBlobStorageTier(blobName, tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, result);

Sie können folgenden Code verwenden:

var storageContext = new StorageContext();
storageContext.Store = new StorageBlob();
storageContext.Tier = req.Query["tier"];
storageContext.Result = await store.SetBlobStorageTier(blobName, storageContext.Tier);
logger.LogInformationObject(LogEventIds.setBlobProperties, storageContext);

Protokollebenen

Das Zuweisen des entsprechenden Protokolliergrads ist möglicherweise etwas kompliziert. Die folgenden allgemeinen Beschreibungen von Protokolliergraden stammen aus der LogLevel-Enumeration.

LogLevel Enum Beschreibung
LogTrace 0 Hier sind die ausführlichsten Meldungen und möglicherweise vertrauliche Anwendungsdaten enthalten. Diese Nachrichten sind standardmäßig deaktiviert und sollten nicht in einer Produktionsumgebung aktiviert werden.
LogDebug 1 Dieser Protokolliergrad wird während der Entwicklung für interaktive Untersuchungen verwendet. Diese Protokolle enthalten hauptsächlich Informationen, die für das Debuggen nützlich sind und keinen langfristigen Wert haben.
LogInformation 2 Hier wird der allgemeine Ablauf einer Anwendung nachverfolgt. Diese Protokolle sollten einen langfristigen Nutzen besitzen.
LogWarning 3 Hier wird ein ungewöhnliches oder unerwartetes Ereignis im Anwendungsfluss hervorgehoben, aber die Anwendung wird nicht beendet.
LogError 4 Hier wird protokolliert, wenn der aktuelle Ausführungsfluss aufgrund eines Fehlers beendet wird. Diese Protokolle sollten auf Fehler im Zusammenhang mit der aktuellen Aktivität und nicht auf einen anwendungsweiten Fehler hinweisen.
LogCritical 5 Hier wird ein nicht behebbarer Anwendungs- oder Systemabsturz oder ein katastrophaler Fehler beschrieben, der eine sofortige Reaktion erfordert.
LogNone 6 Wird nicht zum Schreiben von Protokollmeldungen verwendet. Gibt an, dass eine Protokollierungskategorie keine Meldungen schreiben soll.

Nächste Schritte

Produktdokumentation:

Microsoft Learn-Module: