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 .

Výstup ukázkové žádosti

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, MediaTypeHeaderValue který se použije pro protokolování jako binární.
  • 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;
    });
}