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.
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.UseHttpLogging();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.MapGet("/", () => "Hello World!");
app.Run();
Standardmäßig protokolliert die HTTP-Protokollierung allgemeine Eigenschaften wie Pfad, Statuscode und Header für Anforderungen und Antworten. Fügen Sie der Datei appsettings.Development.json
auf der Ebene "LogLevel": {
die folgende Zeile hinzu, damit die HTTP-Protokolle angezeigt werden:
"Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"
Die Ausgabe wird als einzelne Nachricht unter LogLevel.Information
protokolliert.
HTTP-Protokollierungsoptionen
Um die Middleware für die HTTP-Protokollierung zu konfigurieren, rufen Sie AddHttpLogging in Program.cs
auf.
using Microsoft.AspNetCore.HttpLogging;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpLogging(logging =>
{
logging.LoggingFields = HttpLoggingFields.All;
logging.RequestHeaders.Add("sec-ch-ua");
logging.ResponseHeaders.Add("MyResponseHeader");
logging.MediaTypeOptions.AddText("application/javascript");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHttpLogging();
app.Use(async (context, next) =>
{
context.Response.Headers["MyResponseHeader"] =
new string[] { "My Response Header Value" };
await next();
});
app.MapGet("/", () => "Hello World!");
app.Run();
LoggingFields
HttpLoggingOptions.LoggingFields
ist ein Enumerationsflag, das bestimmte Teile der zu protokollierenden Anforderung und Antwort konfiguriert. HttpLoggingOptions.LoggingFields
ist standardmäßig RequestPropertiesAndHeaders | ResponsePropertiesAndHeaders.
RequestHeaders
Headers ist eine Gruppe von HTTP-Anforderungsheadern, die protokolliert werden dürfen. Headerwerte werden nur für Headernamen protokolliert, die in dieser Sammlung enthalten sind. Der folgende Code protokolliert den Anforderungsheader "sec-ch-ua"
. Beim Entfernen von logging.RequestHeaders.Add("sec-ch-ua");
wird der Wert des Anforderungsheaders "sec-ch-ua"
entfernt. Der folgende hervorgehobene Code ruft HttpLoggingOptions.RequestHeaders
und HttpLoggingOptions.ResponseHeaders
auf:
using Microsoft.AspNetCore.HttpLogging;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpLogging(logging =>
{
logging.LoggingFields = HttpLoggingFields.All;
logging.RequestHeaders.Add("sec-ch-ua");
logging.ResponseHeaders.Add("MyResponseHeader");
logging.MediaTypeOptions.AddText("application/javascript");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHttpLogging();
app.Use(async (context, next) =>
{
context.Response.Headers["MyResponseHeader"] =
new string[] { "My Response Header Value" };
await next();
});
app.MapGet("/", () => "Hello World!");
app.Run();
MediaTypeOptions
MediaTypeOptions stellt die Konfiguration für die Auswahl der für einen bestimmten Medientyp zu verwendenden Codierung bereit.
using Microsoft.AspNetCore.HttpLogging;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpLogging(logging =>
{
logging.LoggingFields = HttpLoggingFields.All;
logging.RequestHeaders.Add("sec-ch-ua");
logging.ResponseHeaders.Add("MyResponseHeader");
logging.MediaTypeOptions.AddText("application/javascript");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHttpLogging();
app.Use(async (context, next) =>
{
context.Response.Headers["MyResponseHeader"] =
new string[] { "My Response Header Value" };
await next();
});
app.MapGet("/", () => "Hello World!");
app.Run();
MediaTypeOptions
Methoden
RequestBodyLogLimit
und ResponseBodyLogLimit
using Microsoft.AspNetCore.HttpLogging;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHttpLogging(logging =>
{
logging.LoggingFields = HttpLoggingFields.All;
logging.RequestHeaders.Add("sec-ch-ua");
logging.ResponseHeaders.Add("MyResponseHeader");
logging.MediaTypeOptions.AddText("application/javascript");
logging.RequestBodyLogLimit = 4096;
logging.ResponseBodyLogLimit = 4096;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseHttpLogging();
app.Use(async (context, next) =>
{
context.Response.Headers["MyResponseHeader"] =
new string[] { "My Response Header Value" };
await next();
});
app.MapGet("/", () => "Hello World!");
app.Run();