Přihlášení HTTP ASP.NET Core
Protokolování HTTP je middleware, který protokoluje informace o požadavcích HTTP a odpovědích HTTP. Protokolování HTTP poskytuje protokoly:
- Informace o požadavku HTTP
- Společné vlastnosti
- Hlavičky
- Text
- Informace o odpovědi HTTP
Protokolování HTTP je užitečné v několika scénářích:
- Zaznamenejte informace o příchozích požadavcích a odpovědích.
- Filtrovat, které části žádosti a odpovědi jsou protokolovány.
- Filtrování hlaviček, které se mají protokolovat
Protokolování HTTP může snížit výkon aplikace, zejména při protokolování těla žádosti a odpovědi. Při výběru polí pro protokolování Vezměte v úvahu dopad na výkon. Otestujte dopad na výkon vybraných vlastností protokolování.
Upozornění
Protokolování HTTP může potenciálně protokolovat identifikovatelné osobní údaje (PII). Vezměte v úvahu riziko a vyhněte se protokolování citlivých informací.
Povolení protokolování HTTP
Protokolování HTTP je povoleno pomocí UseHttpLogging , které přidává middleware protokolování protokolu HTTP.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseHttpLogging();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello World!");
});
});
}
Ve výchozím nastavení protokoluje protokolování HTTP společné vlastnosti, jako je například cesta, stavový kód a hlavičky pro žádosti a odpovědi. Výstup je protokolován jako jediná zpráva na adrese LogLevel.Information .

Možnosti protokolování HTTP
Chcete-li nakonfigurovat middleware protokolování HTTP, zavolejte AddHttpLogging na ConfigureServices .
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 je příznak výčtu, který konfiguruje určité části žádosti a odpovědi na protokol. LoggingFields Výchozí hodnota je 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;
});
}
| Příznak | Příznak pro protokolování HTTP | Hodnota |
|---|---|---|
| Žádné | Bez protokolování. | 0x0 |
RequestPath |
Cesta požadavku, která obsahuje i Path PathBase . | 0x1 |
RequestQuery |
Požadavek QueryString . | 0x2 |
RequestProtocol |
Požadavek Protocol . | 0x4 |
RequestMethod |
Požadavek Method . | 0x8 |
RequestScheme |
Požadavek Scheme . | 0x10 |
ResponseStatusCode |
Odpověď StatusCode : | 0x20 |
RequestHeaders |
Požadavek Headers . Hlavičky požadavku jsou protokolovány ihned po vyvolání middleware. Záhlaví jsou standardně redigována se znakem ' [Redigováned] ', pokud není uvedeno v HttpLoggingOptions.RequestHeaders . |
0x40 |
ResponseHeaders |
Odpověď Headers : Hlavičky odpovědi jsou protokolovány při Body zapsání do nebo při StartAsync volání. Záhlaví jsou standardně redigována se znakem ' [Redigováned] ', pokud není uvedeno v HttpLoggingOptions.ResponseHeaders . |
0x80 |
RequestTrailers |
Request IHttpRequestTrailersFeature. přípojes. Požadavky na přípojná vozidla nejsou v tuto chvíli protokolovány. | 0x100 |
ResponseTrailers |
Response IHttpResponseTrailersFeature. přívěsy. Přípojná vozidla nejsou v tuto chvíli protokolována. | 0x200 |
RequestBody |
Požadavek Body . Protokolování textu žádosti má vliv na výkon, protože vyžaduje ukládání do vyrovnávací paměti celého těla požadavku až do vyrovnávací paměti HttpLoggingOptions.RequestBodyLogLimit . |
0x400 |
ResponseBody |
Odpověď Body : Protokolování těla odpovědi má vliv na výkon, protože vyžaduje ukládání do vyrovnávací paměti celé tělo odpovědi HttpLoggingOptions.ResponseBodyLogLimit . |
0x800 |
RequestProperties |
Příznak pro protokolování kolekce vlastností požadavku HTTP, včetně,, RequestPath , RequestQuery RequestProtocol RequestMethod a RequestScheme . |
RequestPath | RequestQuery | RequestProtocol | RequestMethod | RequestScheme |
RequestPropertiesAndHeaders |
Příznak pro protokolování vlastností a hlaviček požadavků HTTP Zahrnuje RequestProperties a RequestHeaders . |
RequestProperties | RequestHeaders |
ResponsePropertiesAndHeaders |
Příznak pro protokolování vlastností a hlaviček odpovědi HTTP Zahrnuje ResponseStatusCode a ResponseHeaders . |
ResponseStatusCode | ResponseHeaders |
Request |
Příznak pro protokolování celé žádosti HTTP Zahrnuje RequestPropertiesAndHeaders a RequestBody . Protokolování textu žádosti má vliv na výkon, protože vyžaduje ukládání do vyrovnávací paměti celého těla požadavku až do vyrovnávací paměti HttpLoggingOptions.RequestBodyLogLimit . |
RequestPropertiesAndHeaders | RequestBody |
Response |
Příznak pro protokolování celé odpovědi HTTP Zahrnuje ResponseStatusCode , ResponseHeaders a ResponseBody . Protokolování těla odpovědi má vliv na výkon, protože vyžaduje ukládání do vyrovnávací paměti celé tělo odpovědi HttpLoggingOptions.ResponseBodyLogLimit . |
ResponseStatusCode | ResponseHeaders | ResponseBody |
All |
Příznak pro protokolování požadavků a odpovědí HTTP Zahrnuje Request a Response . Protokolování požadavku a textu odpovědi má vliv na výkon, protože vyžaduje ukládání do vyrovnávací paměti pro celý požadavek a tělo odpovědi až do HttpLoggingOptions.RequestBodyLogLimit a HttpLoggingOptions.ResponseBodyLogLimit . |
Request | Response |
RequestHeaders
RequestHeaders je sada hlaviček požadavků protokolu HTTP, které je povoleno protokolovat. Hodnoty hlaviček jsou protokolovány pouze pro názvy hlaviček, které jsou v této kolekci.
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 je sada hlaviček HTTP odpovědi, které mohou být protokolovány. Hodnoty hlaviček jsou protokolovány pouze pro názvy hlaviček, které jsou v této kolekci.
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 poskytuje konfiguraci pro výběr, které kódování se má použít pro určitý typ média.
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 způsobů
public void AddText(string contentType)- Přidá contentType, který se použije pro protokolování jako text pomocí kódování UTF-8.
public void AddText(string contentType, Encoding encoding)- Přidá contentType, který se použije pro protokolování jako text pomocí zadaného kódování.
public void AddBinary(MediaTypeHeaderValue mediaType)- Přidá objekt,
MediaTypeHeaderValuekterý se použije pro protokolování jako binární.
- Přidá objekt,
public void AddBinary(string contentType)- Přidá obsah, který se použije pro protokolování jako text pomocí zadaného typu obsahu.
public void Clear()- Vymaže všechna MediaTypes.
RequestBodyLogLimit
Maximální velikost textu požadavku, která se má protokolovat, v bajtech Výchozí hodnota je 32 KB.
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
Maximální velikost textu odezvy pro protokol v bajtech Výchozí hodnota je 32 KB.
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;
});
}