Registro HTTP en ASP.NET Core
Registro HTTP es un middleware que registra información sobre las solicitudes HTTP y las respuestas HTTP. El registro HTTP proporciona registros de:
- Información de solicitud HTTP
- Propiedades comunes
- Encabezados
- Cuerpo
- Información de respuesta HTTP
Registro HTTP es útil en varios escenarios para:
- Registrar información sobre las solicitudes y respuestas entrantes.
- Filtrar las partes de la solicitud y la respuesta que se registran.
- Filtrar los encabezados que se registrarán.
Registro HTTP puede reducir el rendimiento de una aplicación, especialmente al registrar los cuerpos de solicitud y respuesta. Tenga en cuenta el impacto en el rendimiento al seleccionar los campos que se van a registrar. Pruebe cómo inciden en el rendimiento las propiedades de registro seleccionadas.
Advertencia
Registro HTTP puede registrar potencialmente información de identificación personal (PII). Tenga en cuenta el riesgo y evite registrar información confidencial.
Habilitación de Registro HTTP
Registro HTTP está habilitado con UseHttpLogging, que agrega middleware de registro 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!");
});
});
}
De forma predeterminada, Registro HTTP registra propiedades comunes como ruta de acceso, código de estado y encabezados para solicitudes y respuestas. La salida se registra como un único mensaje en LogLevel.Information.

Opciones de Registro HTTP
Para configurar el middleware de registro HTTP, llame a AddHttpLogging en 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 es una marca de enumeración que configura partes específicas de la solicitud y respuesta para registrar. LoggingFields se establece de forma predeterminada en 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;
});
}
| Marca | Marca para registrar HTTP | Value |
|---|---|---|
| Ninguno | Sin registro. | 0x0 |
RequestPath |
Ruta de acceso de solicitud, que incluye Path y PathBase. | 0x1 |
RequestQuery |
QueryString de solicitud. | 0x2 |
RequestProtocol |
Protocol de solicitud. | 0x4 |
RequestMethod |
Method de solicitud. | 0x8 |
RequestScheme |
Scheme de solicitud. | 0x10 |
ResponseStatusCode |
StatusCode de respuesta. | 0x20 |
RequestHeaders |
Headers de solicitud. Los encabezados de solicitud se registran en cuanto se invoca el middleware. Los encabezados se redactan de manera predeterminada con el carácter "[Redacted]", a menos que se especifique en HttpLoggingOptions.RequestHeaders. |
0x40 |
ResponseHeaders |
Headers de respuesta. Los encabezados de respuesta se registran cuando se escribe a Body o cuando se llama a StartAsync. Los encabezados se redactan de manera predeterminada con el carácter "[Redacted]", a menos que se especifique en HttpLoggingOptions.ResponseHeaders. |
0x80 |
RequestTrailers |
Solicite IHttpRequestTrailersFeature.Trailers. Los finalizadores de solicitud no se registran actualmente. | 0x100 |
ResponseTrailers |
Respuesta IHttpResponseTrailersFeature.Trailers. Los finalizadores de respuesta no se registran actualmente. | 0x200 |
RequestBody |
Body de solicitud. El registro del cuerpo de la solicitud tiene implicaciones en el rendimiento, ya que requiere almacenar en búfer todo el cuerpo de la solicitud hasta HttpLoggingOptions.RequestBodyLogLimit. |
0x400 |
ResponseBody |
Body de respuesta. El registro del cuerpo de la respuesta tiene implicaciones en el rendimiento, ya que requiere almacenar en búfer todo el cuerpo de la respuesta hasta HttpLoggingOptions.ResponseBodyLogLimit. |
0x800 |
RequestProperties |
Marca para registrar una colección de propiedades de solicitud HTTP, incluidas RequestPath, RequestQuery, RequestProtocol, RequestMethod y RequestScheme. |
RequestPath | RequestQuery | RequestProtocol | RequestMethod | RequestScheme |
RequestPropertiesAndHeaders |
Marca para registrar encabezados y propiedades de solicitud HTTP. Incluye RequestProperties y RequestHeaders. |
RequestProperties | RequestHeaders |
ResponsePropertiesAndHeaders |
Marca para registrar encabezados y propiedades de respuesta HTTP. Incluye ResponseStatusCode y ResponseHeaders. |
ResponseStatusCode | ResponseHeaders |
Request |
Marca para registrar toda la solicitud HTTP. Incluye RequestPropertiesAndHeaders y RequestBody. El registro del cuerpo de la solicitud tiene implicaciones en el rendimiento, ya que requiere almacenar en búfer todo el cuerpo de la solicitud hasta HttpLoggingOptions.RequestBodyLogLimit. |
RequestPropertiesAndHeaders | RequestBody |
Response |
Marca para registrar toda la respuesta HTTP. Incluye ResponseStatusCode, ResponseHeaders y ResponseBody. El registro del cuerpo de la respuesta tiene implicaciones en el rendimiento, ya que requiere almacenar en búfer todo el cuerpo de la respuesta hasta HttpLoggingOptions.ResponseBodyLogLimit. |
ResponseStatusCode | ResponseHeaders | ResponseBody |
All |
Marca para registrar la solicitud y la respuesta HTTP. Incluye Request y Response. El registro del cuerpo de la solicitud y la respuesta tiene implicaciones de rendimiento, ya que requiere almacenar en búfer todo el cuerpo de la solicitud y la respuesta hasta HttpLoggingOptions.RequestBodyLogLimit y HttpLoggingOptions.ResponseBodyLogLimit. |
Request | Response |
RequestHeaders
RequestHeaders son un conjunto de encabezados de solicitud HTTP que se pueden registrar. Los valores de encabezado solo se registran para los nombres de encabezado que están en esta colección.
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 son un conjunto de encabezados de respuesta HTTP que se pueden registrar. Los valores de encabezado solo se registran para los nombres de encabezado que están en esta colección.
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 proporciona la configuración para seleccionar la codificación que se va a usar para un tipo de medio específico.
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;
});
}
Métodos de MediaTypeOptions
public void AddText(string contentType)- Agrega un objeto contentType que se usará para el registro como texto mediante la codificación UTF-8.
public void AddText(string contentType, Encoding encoding)- Agrega un objeto contentType que se usará para el registro como texto mediante la codificación especificada.
public void AddBinary(MediaTypeHeaderValue mediaType)- Agrega un objeto
MediaTypeHeaderValueque se va a usar para el registro como binario.
- Agrega un objeto
public void AddBinary(string contentType)- Agrega un contenido que se usará para el registro como texto mediante el tipo de contenido especificado.
public void Clear()- Borra todos los objetos MediaTypes.
RequestBodyLogLimit
Tamaño máximo del cuerpo de la solicitud para registrar, en bytes. El valor predeterminado es 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
Tamaño máximo del cuerpo de la respuesta para registrar, en bytes. El valor predeterminado es 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;
});
}