HTTP-Protokollierung in ASP.NET Core

HTTP-Protokollierung ist eine Middleware, die Informationen zu HTTP-Anforderungen und HTTP-Antworten protokolliert. Die HTTP-Protokollierung enthält Protokolle zu:

  • HTTP-Anforderungsinformationen
  • Allgemeine Eigenschaften
  • Header
  • Text
  • HTTP-Antwortinformationen

Die HTTP-Protokollierung ist hilfreich in verschiedenen Szenarios wie:

  • Aufzeichnen von Informationen zu eingehenden Anforderungen und Antworten.
  • Filtern, welche Teile der Anforderung und Antwort protokolliert werden.
  • Filtern, welche Header protokolliert werden sollen.

Die HTTP-Protokollierung kann die Leistung einer App reduzieren, insbesondere beim Protokollieren des Anforderungs- und Antwortkörpers. Berücksichtigen Sie die Auswirkungen auf die Leistung, wenn Sie die zu protokollierenden Felder auswählen. Testen Sie die Auswirkungen der ausgewählten Protokollierungseigenschaften auf die Leistung.

Warnung

Die HTTP-Protokollierung kann potenziell personenbezogene Informationen (Personally Identifiable Information, PII) protokollieren. Berücksichtigen Sie das Risiko, und vermeiden Sie die Protokollierung vertraulicher Informationen.

Aktivieren der HTTP-Protokollierung

Die HTTP-Protokollierung wird mit UseHttpLogging aktiviert, wodurch Middleware für die HTTP-Protokollierung hinzufügt wird.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseHttpLogging();

    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapGet("/", async context =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    });
}

Standardmäßig protokolliert die HTTP-Protokollierung allgemeine Eigenschaften wie Pfad, Statuscode und Header für Anforderungen und Antworten. Die Ausgabe wird als einzelne Nachricht unter LogLevel.Information protokolliert.

Beispielanforderungsausgabe

HTTP-Protokollierungsoptionen

Um die Middleware für die HTTP-Protokollierung zu konfigurieren, rufen Sie AddHttpLogging in ConfigureServices auf.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

LoggingFields

HttpLoggingOptions.LoggingFields ist ein Enumerationsflag, das bestimmte Teile der zu protokollierenden Anforderung und Antwort konfiguriert. Der Standardwert von LoggingFields ist RequestPropertiesAndHeaders | ResponsePropertiesAndHeaders.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}
Flag Flag für die HTTP-Protokollierung Wert
Keine Keine Protokollierung. 0x0
RequestPath Der Anforderungspfad, der sowohl Path als auch PathBase enthält. 0x1
RequestQuery Anforderung QueryString. 0x2
RequestProtocol Anforderung Protocol. 0x4
RequestMethod Anforderung Method. 0x8
RequestScheme Anforderung Scheme. 0x10
ResponseStatusCode Anforderung StatusCode. 0x20
RequestHeaders Anforderung Headers. Anforderungsheader werden protokolliert, sobald die Middleware aufgerufen wird. Header werden standardmäßig mit dem Zeichen „[Redacted]“ bearbeitet, es sei denn, dies ist in HttpLoggingOptions.RequestHeaders angegeben. 0x40
ResponseHeaders Antwort Headers. Antwortheader werden protokolliert, wenn in Body geschrieben oder StartAsync aufgerufen wird. Header werden standardmäßig mit dem Zeichen „[Redacted]“ bearbeitet, es sei denn, dies ist in HttpLoggingOptions.ResponseHeaders angegeben. 0x80
RequestTrailers Anforderung IHttpRequestTrailersFeature.Trailers. Anforderungsnachspanne werden derzeit nicht protokolliert. 0x100
ResponseTrailers Antwort IHttpResponseTrailersFeature.Trailers. Antwortnachspanne werden derzeit nicht protokolliert. 0x200
RequestBody Anforderung Body. Die Protokollierung des Anforderungstexts hat Auswirkungen auf die Leistung, da der gesamte Anforderungstext in HttpLoggingOptions.RequestBodyLogLimit gepuffert werden muss. 0x400
ResponseBody Antwort Body. Die Protokollierung des Antworttexts hat Auswirkungen auf die Leistung, da der gesamte Antworttext in HttpLoggingOptions.ResponseBodyLogLimit gepuffert werden muss. 0x800
RequestProperties Flag zum Protokollieren einer Sammlung von HTTP-Anforderungseigenschaften einschließlich RequestPath, RequestQuery, RequestProtocol, RequestMethod und RequestScheme. RequestPath | RequestQuery | RequestProtocol | RequestMethod | RequestScheme
RequestPropertiesAndHeaders Flag zum Protokollieren von HTTP-Anforderungseigenschaften und -Headern. Beinhaltet RequestProperties und RequestHeaders. RequestProperties | RequestHeaders
ResponsePropertiesAndHeaders Flag zum Protokollieren von HTTP-Antworteigenschaften und -Headern. Beinhaltet ResponseStatusCode und ResponseHeaders. ResponseStatusCode | ResponseHeaders
Request Flag zum Protokollieren der gesamten HTTP-Anforderung. Beinhaltet RequestPropertiesAndHeaders und RequestBody. Die Protokollierung des Anforderungstexts hat Auswirkungen auf die Leistung, da der gesamte Anforderungstext in HttpLoggingOptions.RequestBodyLogLimit gepuffert werden muss. RequestPropertiesAndHeaders | RequestBody
Response Flag zum Protokollieren der gesamten HTTP-Antwort. Schließt ResponseStatusCode, ResponseHeaders und ResponseBody ein. Die Protokollierung des Antworttexts hat Auswirkungen auf die Leistung, da der gesamte Antworttext in HttpLoggingOptions.ResponseBodyLogLimit gepuffert werden muss. ResponseStatusCode | ResponseHeaders | ResponseBody
All Flag zum Protokollieren sowohl der HTTP-Anforderung als auch -Antwort. Beinhaltet Request und Response. Die Protokollierung des Anforderungs- als auch Antworttexts hat Auswirkungen auf die Leistung, da der gesamte Anforderungs- und Antworttext in HttpLoggingOptions.RequestBodyLogLimit und HttpLoggingOptions.ResponseBodyLogLimit gepuffert werden muss. Request | Response

RequestHeaders

RequestHeaders ist eine Gruppe von HTTP-Anforderungsheadern, die protokolliert werden dürfen. Headerwerte werden nur für Headernamen protokolliert, die in dieser Sammlung enthalten sind.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

ResponseHeaders

ResponseHeaders ist eine Gruppe von HTTP-Antwortheadern, die protokolliert werden dürfen. Headerwerte werden nur für Headernamen protokolliert, die in dieser Sammlung enthalten sind.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

MediaTypeOptions

MediaTypeOptions stellt die Konfiguration für die Auswahl der für einen bestimmten Medientyp zu verwendenden Codierung bereit.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

MediaTypeOptions Methoden

  • public void AddText(string contentType)
    • Fügt einen contentType hinzu, der für die Protokollierung als Text mit UTF-8-Codierung verwendet werden soll.
  • public void AddText(string contentType, Encoding encoding)
    • Fügt einen contentType hinzu, der für die Protokollierung als Text mit der angegebenen Codierung verwendet werden soll.
  • public void AddBinary(MediaTypeHeaderValue mediaType)
    • Fügt einen MediaTypeHeaderValue hinzu, der für die Protokollierung als Binärdatei verwendet werden soll.
  • public void AddBinary(string contentType)
    • Fügt einen contentType hinzu, der für die Protokollierung als Text mit dem angegebenen Inhaltstyp verwendet werden soll.
  • public void Clear()
    • Löscht alle MediaTypes.

RequestBodyLogLimit

Maximale Größe des zu protokollierenden Anforderungskörpers in Bytes. Der Standardwert ist 32 MB.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}

ResponseBodyLogLimit

Maximale Größe des zu protokollierenden Antwortkörpers in Bytes. Der Standardwert ist 32 MB.

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpLogging(logging =>
    {
        // Customize HTTP logging here.
        logging.LoggingFields = HttpLoggingFields.All;
        logging.RequestHeaders.Add("My-Request-Header");
        logging.ResponseHeaders.Add("My-Response-Header");
        logging.MediaTypeOptions.AddText("application/javascript");
        logging.RequestBodyLogLimit = 4096;
        logging.ResponseBodyLogLimit = 4096;
    });
}