ASP.NET Core HTTP günlüğü

HTTP günlüğü, HTTP istekleri ve HTTP yanıtları hakkındaki bilgileri günlüğe kaydeden bir ara yazılım. HTTP günlüğü şu günlükleri sağlar:

  • HTTP istek bilgileri
  • Ortak özellikler
  • Üst Bilgiler
  • Gövde
  • HTTP yanıt bilgileri

HTTP günlüğü, aşağıdakileri yapmak için çeşitli senaryolarda değerlidir:

  • Gelen istekler ve yanıtlarla ilgili bilgileri kaydedin.
  • İstek ve yanıtın hangi bölümlerinin günlüğe kaydedileceğini filtreleyin.
  • Hangi üst bilgilerin günlüğe kaydedileceği filtreleniyor.

HTTP günlüğü, özellikle istek ve yanıt gövdelerini günlüğe kaydederken bir uygulamanın performansını azaltabilir. Günlüğe kaydedilecek alanları seçerken performans etkisini göz önünde bulundurun. Seçili günlük özelliklerinin performans etkisini test edin.

Uyarı

HTTP günlüğü, kişisel olarak tanımlanabilen bilgileri (PII) günlüğe kaydedebilir. Riskleri göz önünde bulundurun ve hassas bilgileri günlüğe kaydetmeyi önleyin.

HTTP günlüğünü etkinleştirme

Http günlüğü, ile etkinleştirilir UseHttpLogging ve http günlüğü ara yazılımı ekler.

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

    app.UseRouting();

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

Varsayılan olarak HTTP günlüğü, istekler ve yanıtlar için yol, durum kodu ve üstbilgiler gibi ortak özellikleri günlüğe kaydeder. Çıktı, öğesinde tek bir ileti olarak günlüğe kaydedilir LogLevel.Information .

Örnek istek çıkışı

HTTP günlüğü seçenekleri

HTTP günlüğü ara yazılımını yapılandırmak için ' de çağrısı yapın AddHttpLogging 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 , isteğin belirli kısımlarını ve günlüğe yanıtı yapılandıran bir sabit listesi bayrağıdır. LoggingFields Varsayılan olarak olur 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;
    });
}
Bayrak HTTP günlüğe kaydetme bayrağı Değer
Hiçbiri Günlüğe kaydetme yok. 'dır
RequestPath Hem hem de içeren istek yolu Path PathBase . 0x1
RequestQuery İstek QueryString . 0x2
RequestProtocol İstek Protocol . 4,
RequestMethod İstek Method . 0x8
RequestScheme İstek Scheme . 0x10
ResponseStatusCode Yanıt StatusCode . 0x20
RequestHeaders İstek Headers . İstek üst bilgileri, ara yazılım çağrılır almaz günlüğe kaydedilir. İçinde belirtilmedikçe, üst bilgiler ' [redaksiyonu] ' karakteriyle varsayılan olarak redaksiyonu yapılır HttpLoggingOptions.RequestHeaders . 0x40
ResponseHeaders Yanıt Headers . Yanıt üst bilgileri, Body veya ne zaman çağrıldığında günlüğe kaydedilir StartAsync . İçinde belirtilmedikçe, üst bilgiler ' [redaksiyonu] ' karakteriyle varsayılan olarak redaksiyonu yapılır HttpLoggingOptions.ResponseHeaders . 0x80
RequestTrailers Ihttprequesttrailersfeature. Treyiiste. İstek tanıtımları Şu anda günlüğe kaydedilmez. 0x100
ResponseTrailers Yanıt IHttpResponseTrailersFeature. Treyi. Yanıt tanıtımları Şu anda günlüğe kaydedilmez. 0x200
RequestBody İstek Body . İstek gövdesinin günlük kaydı, tüm istek gövdesinin arabelleğe alınması gerektiğinden performansı etkiler HttpLoggingOptions.RequestBodyLogLimit . 0x400
ResponseBody Yanıt Body . Yanıt gövdesinin günlüğe kaydedilmesi, tüm yanıt gövdesinin arabelleğe alınması gerektiğinden performans etkilerine sahip olur HttpLoggingOptions.ResponseBodyLogLimit . 0x800
RequestProperties ,,, Ve dahil olmak üzere http istek özelliklerinin bir koleksiyonunu günlüğe kaydetme bayrağı RequestPath RequestQuery RequestProtocol RequestMethod RequestScheme . RequestPath | RequestQuery | RequestProtocol | RequestMethod | RequestScheme
RequestPropertiesAndHeaders HTTP Istek özelliklerini ve üstbilgilerini günlüğe kaydetme bayrağı. RequestPropertiesVe içerir RequestHeaders . RequestProperties | RequestHeaders
ResponsePropertiesAndHeaders HTTP yanıtı özelliklerini ve üstbilgilerini günlüğe kaydetme bayrağı. ResponseStatusCodeVe içerir ResponseHeaders . ResponseStatusCode | ResponseHeaders
Request Tüm HTTP Isteğini günlüğe kaydetme bayrağı. RequestPropertiesAndHeadersVe içerir RequestBody . İstek gövdesinin günlük kaydı, tüm istek gövdesinin arabelleğe alınması gerektiğinden performansı etkiler HttpLoggingOptions.RequestBodyLogLimit . RequestPropertiesAndHeaders | RequestBody
Response Tüm HTTP yanıtının günlüğe kaydedilmesini belirten bayrak. ResponseStatusCode, ResponseHeaders , Ve içerir ResponseBody . Yanıt gövdesinin günlüğe kaydedilmesi, tüm yanıt gövdesinin arabelleğe alınması gerektiğinden performans etkilerine sahip olur HttpLoggingOptions.ResponseBodyLogLimit . ResponseStatusCode | ResponseHeaders | ResponseBody
All Hem HTTP Isteğini hem de yanıtı günlüğe kaydetme bayrağı. RequestVe içerir Response . İsteğin ve yanıt gövdesinin tüm istek ve yanıt gövdesinin arabelleğe alınması gerektiğinden, istek ve yanıt gövdesinin günlüğe kaydedilmesi performansı etkiler HttpLoggingOptions.RequestBodyLogLimit HttpLoggingOptions.ResponseBodyLogLimit . Request | Response

RequestHeaders

RequestHeaders günlüğe kaydedilecek bir HTTP Istek üst bilgisi kümesidir. Üst bilgi değerleri yalnızca bu koleksiyonda bulunan üst bilgi adları için günlüğe kaydedilir.

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 günlüğe kaydedilecek bir HTTP yanıt üst bilgileri kümesidir. Üst bilgi değerleri yalnızca bu koleksiyonda bulunan üst bilgi adları için günlüğe kaydedilir.

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 belirli bir medya türü için kullanılacak kodlamayı seçme için yapılandırma sağlar.

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 Yöntem

  • public void AddText(string contentType)
    • UTF-8 kodlaması kullanılarak metin olarak günlüğe kaydetme için kullanılacak bir contentType ekler.
  • public void AddText(string contentType, Encoding encoding)
    • Belirtilen kodlamayı kullanarak metin olarak günlüğe kaydetmek için kullanılacak bir contentType ekler.
  • public void AddBinary(MediaTypeHeaderValue mediaType)
    • MediaTypeHeaderValueİkili olarak günlüğe kaydetmek için kullanılacak bir ekler.
  • public void AddBinary(string contentType)
    • Belirtilen içerik türünü kullanarak metin olarak günlüğe kaydetme için kullanılacak bir içerik ekler.
  • public void Clear()
    • Tüm MediaTypes türlerini temizler.

RequestBodyLogLimit

Günlüğe kaydedilecek en büyük istek gövdesi boyutu (bayt). Varsayılan olarak 32 KB 'tır.

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

Günlüğe kaydedilecek en büyük yanıt gövdesi boyutu (bayt). Varsayılan olarak 32 KB 'tır.

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;
    });
}