HTTP Logging adalah middleware yang mencatat informasi tentang permintaan HTTP yang masuk dan tanggapan HTTP. Logging HTTP menyediakan log dari:

  • Informasi permintaan HTTP
  • Properti umum
  • Header
  • Tubuh
  • Informasi respons HTTP

Logging HTTP berguna dalam beberapa skenario untuk:

  • Catat informasi tentang permintaan dan tanggapan yang masuk.
  • Filter bagian mana dari permintaan dan respons yang dicatat.
  • Memfilter header mana yang akan dicatat.

Pencatatan HTTP dapat mengurangi kinerja aplikasi, terutama saat mencatat badan permintaan dan tanggapan. Pertimbangkan dampak kinerja saat memilih bidang untuk dicatat. Uji dampak kinerja properti logging yang dipilih.

Peringatan

Logging HTTP berpotensi dapat mencatat informasi pengenal pribadi (PII). Pertimbangkan risikonya dan hindari mencatat informasi sensitif.

Mengaktifkan pencatatan HTTP

Logging HTTP diaktifkan dengan UseHttpLogging, yang menambahkan middleware logging HTTP.

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

Secara default, Logging HTTP mencatat properti umum seperti jalur, kode status, dan header untuk permintaan dan respons. Tambahkan baris berikut ke appsettings.Development.json file di "LogLevel": { level sehingga log HTTP ditampilkan:

 "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware": "Information"

Keluarannya dicatat sebagai satu pesan di LogLevel.Information.

Opsi Pencatatan HTTP

Untuk mengonfigurasi middleware pencatatan HTTP, panggil AddHttpLogging di Program.cs.

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 adalah flag enum yang mengonfigurasi bagian tertentu dari permintaan dan respons ke log. HttpLoggingOptions.LoggingFields default ke RequestPropertiesAndHeaders | ResponsePropertiesAndHeaders.

RequestHeaders

Header adalah sekumpulan Header Permintaan HTTP yang diizinkan untuk dicatat. Nilai header hanya dicatat untuk nama header yang ada di koleksi ini. Kode berikut mencatat header permintaan "sec-ch-ua". Jika logging.RequestHeaders.Add("sec-ch-ua"); dihapus, nilai header permintaan "sec-ch-ua" diedit. Panggilan kode yang disorot berikut ini: HttpLoggingOptions.RequestHeaders dan HttpLoggingOptions.ResponseHeaders :

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 menyediakan konfigurasi untuk memilih pengkodean mana yang akan digunakan untuk jenis media tertentu.

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 metode

RequestBodyLogLimit dan 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();

By AKDSEO