W3CLogger en ASP.NET Core
W3CLogger es un middleware que escribe archivos de registro en el formato estándar W3C. Los registros contienen información sobre las solicitudes y respuestas HTTP. W3CLogger proporciona registros de lo siguiente:
- Información de solicitud HTTP
- Propiedades comunes
- Encabezados
- Información de respuesta HTTP
- Metadatos sobre el par de solicitud y respuesta (fecha y hora de inicio, tiempo empleado)
W3CLogger 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.
W3CLogger puede reducir el rendimiento de una aplicación. Tenga en cuenta el impacto en el rendimiento al seleccionar los campos que se van a registrar; la reducción del rendimiento aumentará a medida que registre más propiedades. Pruebe cómo inciden en el rendimiento las propiedades de registro seleccionadas.
Advertencia
W3CLogger puede registrar potencialmente información de identificación personal (DCP). Tenga en cuenta el riesgo y evite registrar información confidencial. De forma predeterminada, no se registran los campos que podrían contener DCP.
Habilitación de W3CLogger
W3CLogger está habilitado con UseW3CLogging, que agrega el middleware W3CLogger.
app.UseW3CLogging();
app.UseRouting();
app.MapGet("/", () => "Hello World!");
app.Run();
De forma predeterminada, W3CLogger registra propiedades comunes como la ruta de acceso, el código de estado, la fecha, la hora y el protocolo. Toda la información sobre un único par de solicitud/respuesta se escribe en la misma línea.
#Version: 1.0
#Start-Date: 2021-09-29 22:18:28
#Fields: date time c-ip s-computername s-ip s-port cs-method cs-uri-stem cs-uri-query sc-status time-taken cs-version cs-host cs(User-Agent) cs(Referer)
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 59.9171 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:28 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.1802 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
2021-09-29 22:18:30 ::1 DESKTOP-LH3TLTA ::1 5000 GET / - 200 0.0966 HTTP/1.1 localhost:5000 Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/93.0.4577.82+Safari/537.36 -
Opciones de W3CLogger
Para configurar el middleware de W3CLogger, llame a AddW3CLogging en ConfigureServices.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
LoggingFields
W3CLoggerOptions.LoggingFields es una enumeración de marca de bits que configura partes específicas de la solicitud y respuesta al registro, y otra información sobre la conexión. LoggingFields incluye como valor predeterminado todos los campos posibles, excepto UserName y Cookie.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
| Marca | Descripción | Value |
|---|---|---|
| Ninguno | Sin registro. | 0x0 |
Date |
Fecha en que se produjo la actividad. | 0x1 |
Time |
Hora en que se produjo la actividad. | 0x2 |
ClientIpAddress |
Dirección IP del cliente que accedió al servidor. | 0x4 |
UserName |
Nombre del usuario autenticado que obtuvo acceso al servidor. | 0x8 |
ServerName |
Nombre del servidor en el que se generó la entrada del registro. | 0x10 |
ServerIpAddress |
Dirección IP del servidor en el que se generó la entrada del registro. | 0x20 |
ServerPort |
Número de puerto al que está conectado el cliente. | 0x40 |
Method |
Method de solicitud. | 0x80 |
UriStem |
Ruta de acceso de solicitud, que incluye Path y PathBase. | 0x100 |
UriQuery |
QueryString de solicitud. | 0x200 |
ProtocolStatus |
StatusCode de respuesta. | 0x400 |
TimeTaken |
Duración del tiempo, en milisegundos, que consumió la acción. | 0x800 |
ProtocolVersion |
Protocol de solicitud. | 0x1000 |
Host |
Microsoft.AspNetCore.Http.Headers.HeaderNames.Host de solicitud. |
0x2000 |
UserAgent |
Microsoft.AspNetCore.Http.Headers.HeaderNames.UserAgent de solicitud. |
0x4000 |
Cookie |
Microsoft.AspNetCore.Http.Headers.HeaderNames.Cookie de solicitud. |
0x8000 |
Referer |
Microsoft.AspNetCore.Http.Headers.HeaderNames.Referer de solicitud. |
0x10000 |
ConnectionInfoFields |
Marca para registrar una colección de propiedades, sobre la conexión HTTP, incluidas ClientIpAddress, ServerIpAddress y ServerPort. |
ClientIpAddress | ServerIpAddress | ServerPort |
RequestHeaders |
Marca para registrar una colección de encabezados de solicitud, incluidos Host, Referer y UserAgent. |
Host | Referer | UserAgent |
Request |
Marca para registrar una colección de propiedades sobre la solicitud, incluidas UriStem, UriQuery, ProtocolVersion, Method y RequestHeaders. |
UriStem | UriQuery | ProtocolVersion | Method | RequestHeaders |
All |
Marca para registrar todos los campos posibles. | Date | Time | ServerName | Method | UriStem | UriQuery | ProtocolStatus | TimeTaken | ProtocolVersion | Host | UserAgent | Referer | ConnectionInfoFields | UserName | Cookie |
FileSizeLimit
Tamaño máximo del archivo de registro en bytes. El valor predeterminado es 10 MB.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
RetainedFileCountLimit
Número máximo de archivos que se mantienen en el disco antes de la instalación, por aplicación. El valor predeterminado es 4, con un límite de 10 000.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
FileName
Prefijo que se usará para el nombre del archivo de registro. Se anexará la fecha actual más un número de archivo, con el formato {YYYYMMDD.X}.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
LogDirectory
Directorio en el que se escribirá el archivo de registro. El valor predeterminado es ./logs/, en relación con el directorio de la aplicación.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});
FlushInterval
El período tras el cual se vaciará el archivo de registro. El valor predeterminado es 1 segundo.
builder.Services.AddW3CLogging(logging =>
{
// Log all W3C fields
logging.LoggingFields = W3CLoggingFields.All;
logging.FileSizeLimit = 5 * 1024 * 1024;
logging.RetainedFileCountLimit = 2;
logging.FileName = "MyLogFile";
logging.LogDirectory = @"C:\logs";
logging.FlushInterval = TimeSpan.FromSeconds(2);
});