# En lo que respecta al registro en ASP.Applications (Part 1...probablementeM SK3

<!--category-- Logging,Serilog,ASP.NET,C# -->
<datetime class="hidden">2024-10-27T17:00</datetime>

# El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

El registro es una parte crítica de las aplicaciones, pero a menudo lo veo malinterpretado / mal usada en ASP.Applications NETM SK2 Este es parte post y parte manifesto sobre cómo registrarse eficazmente en ASP

Este no es un guía completo para registrarlo; allí's LOTS de aquellos que están ahíM SK2 élMSC3s más sobre elegir una estrategia eficaz de registro para sus aplicaciones ASPMST4NETMst5

En el registro principal debería ser USEFUL; ya sea logging de 's mientras usted se desarrolla o logging en la producción debería ser útil para usted M SK3 su equipo / sus usuarios.

[TOC]

# El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

A menudo, el registro es visto como la ' sólo lo hace cuando hay las excepciones de 'M SK2 cosa. Creo que esto malinterpreta lo que debería ser el registroMSC4

**En el párrafo 2 de la resolución, la Asamblea General pidió al Secretario General que le presentara en su quincuagésimo séptimo período de sesiones un informe sobre los progresos realizados en la aplicación del Programa de Acción para prevenir, combatir y eliminar el tráfico ilícito de armas pequeñas y ligeras en todos sus aspectos.**

En general, debería ser posible ejecutar una parte significativa de su aplicación localmente; en este contexto `log.LogInformation` Es tu amigo.

# El Presidente (habla en inglés): De conformidad con el entendimiento alcanzado en las consultas previas del Consejo, consideraré que la Asamblea General desea concluir su examen de este tema del programa.

## El Presidente interino (habla en inglés): Doy las gracias al representante de la República Islámica del Irán por su declaración.

Durante los años 30 he escrito código IM SK2 he visto algunos ejemplos de buena tala y mucho más de malas tala

El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

1. Logar en Desarrollo debería dar suficiente información sobre cómo su aplicación está ejecutando para entender lo que ocurre cuando.
2. El registro en la producción debería darle un mecanismo super rápido y fácil para entender cómo su aplicación fracasa.
3. Mucho más de logging en la producción es negativo; puede retrasar su aplicación y hacer que sea más difícil encontrar las cosas importantes.

Recuerde; el registro ALWAYS arrastra la performance de su aplicación; debe registrar lo que necesita para diagnosticar un problema pero ya no en la producción M SK2 donde la performance es crítica (eMST4gMst5 no ejecutar un test de rendimiento cuando se utiliza la totalidad del registro de fallos de debuggingMSC7

## Los tipos de registro en ASP.NET

### Serilog vs Microsoft.Extensions.Logging

En ASP.NET ya tienes un sistema de registro built-in `Microsoft.Extensions.Logging`. Este es un buen sistema de registro , pero es' no tan flexible como SerilogM SK3 Serilog es un sistema de seguimiento más flexible que le permite registrarse en múltiples depósitos SSK4emisionesMSC5 y enriquecer sus registros con información adicionalMNK6

### El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros en todos los niveles de vida, incluida la educación.

Este es el registro que ocorre cuando su aplicación se inicia. Es' la primera cosa que ocurreM SK2 y esMSC3 la prima cosa que debería ver cuando ejecutas su aplicaciónMska4 En ASPMske5NET especialmente cuando utilizas la configuración, es ' decisivo que entiendo lo que se está ocurriendoMSKA7 cuando su application se inicia~. Es\' una fuente super común de problemas en las aplicaciones ASP\.NETM Ska11

Por ejemplo, en Serilog usted puede hacer esto:

```csharp
Log.Logger = new LoggerConfiguration()
             .WriteTo.Console()
             .WriteTo.File("logs/boot-*.txt", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 7)
             .CreateBootstrapLogger();
```

*NOTA: Esto es limitado ya que no tiene acceso a la configuración en este punto, por ejemplo para usar AppInsights usted'd necesitará probablemente un `#if RELEASE` el bloqueo para establecer la clave adecuada .*

Esto le da datos sobre cualquier problema de arranque en su aplicación; escribe tanto a la consola como a un archivoM SK1 Es también importante ' para asegurarse de que no se guardan todos los archivos de registros; usted puede ver aquí que nosotrosMSC5 sólo estamos conservando |7 días de registro |

Usted' también quiere encargar su método de inicio (en esta aplicación uso el nuevo `Program.cs` method) en un intento/ capturar y registrar todas las excepciones que se produzcan allí

```csharp
try
 {
        ..all your startup code
 }
catch (Exception ex)
{
    if(args.Contains("migrate"))
    {
        Log.Information("Migration complete");
        return;
    }
    Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
    Log.CloseAndFlush();
}
```

El registro.CloseAndFlush() es importante porque garantiza que todos los registros se escriban al disco M SK2su aplicación está a punto de caer, por lo que en caso contrario se desconectará antes de hacerlo.

Aquí también detecto si la aplicación está ejecutando en modo de migración y si así lo logo y saco.

`Log.Fatal` es el nivel de registro más severo; se utiliza cuando su aplicación está a punto de caer
*No todas las excepciones son fatales* - debe usarse `Log.Error` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre hombres y mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

En ASP.NET M SK1 y .NET En general) hay un número de niveles de registros

1. `Log.Fatal` - Este es el nivel de registro más severo; se utiliza cuando su aplicación está en punto de caerM SK3
2. `Log.Error` - Se usa cuando se produce una excepción que significa que la APP (no la solicitud ) no puede continuar más allá de ese punto
3. `Log.Warning` - Esto se usa cuando ocurre algo que ' no es un error, pero es algo de lo que deberían estar conscientes. *No está muy bien.* Sin embargo, no es un error).
4. `Log.Information` - Se usa para información general sobre lo que está ocurriendo en su aplicación.
5. `Log.Debug` - Esto se utiliza para la información de que ' es útil sólo cuando usted' está descubriendo su aplicación Certamente en desarrollo, pero debería ser desactivado en la producciónM SK5

Para la producción I'd en general fija el registro a ser `Log.Fatal`, `Log.Error` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `Log.Warning` El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad de oportunidades entre los hombres y las mujeres en materia de empleo, incluida la eliminación del trabajo forzoso.

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros en todos los niveles de vida, incluida la educación.

En contraste con el registro de inicio, este es el registro que ocurre cuando su aplicación está ejecutando. Este es el log que te dice qué se está produciendo en tu aplicación en cualquier momento dadoM SK2

Por ejemplo, para usar estos en Serilog usted'd hace esto:

```json
  "Serilog": {
    "Enrich": ["FromLogContext", "WithThreadId", "WithThreadName", "WithProcessId", "WithProcessName", "FromLogContext"],
    "MinimumLevel": "Warning",
    "WriteTo": [
        {
          "Name": "Seq",
          "Args":
          {
            "serverUrl": "http://seq:5341",
            "apiKey": ""
          }
        },
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog-.txt",
          "rollingInterval": "Day"
        }
      }

    ],
    "Properties": {
      "ApplicationName": "mostlylucid"
    }
  },
```

## El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Como usted' verá I' soy un gran fan de SerilogMSC2 es una gran biblioteca de registro queM SK4es muy flexibleMST5 Una de las cosas que me gusta en ella es la capacidad de enriquecer sus registros con información adicionalM ST6 Esto puede ser muy útil para diagnosticar problemas en su aplicaciónM st7
En el ejemplo anterior usted puede ver I'm enriquecer mis registros con el id de thread, nombre del thread , id del proceso y nombre del procesoM SK3 Esto puede ser muy útil para diagnosticar problemas en su aplicaciónMSC4

También he configurado el registro para ir a múltiples 'sinks' (outputsM SK3 en este caso IMSC4m envialo a la consolaMST5 a un archivo y a Seq SSK6un servicio de registroMSP7

En este caso, mi servicio de registro preferido es Seq, así que lo envío primero. Luego, si esto falla, lo envio a la consola y a un archivoM SK3

También he establecido la propiedad ApplicationName en los registros; esto puede ser útil si tiene múltiples aplicaciones que se registran al mismo servicio (que para aplicaciones distribuidas usted a menudo va a hacerM SK2 junto con un ID de correlación para vincular los logs juntos para una única solicitudMSC3

Por ejemplo, si tiene una JS front end y una .NET backend, puede establecer el ID de correlación en la parte frontal y pasarlo a la parte posterior.

Hay una gran cobertura de ' sobre cómo se puede hacer esto aquí.: https://josefM SK3codesMSC4append-correlationMska6idMske7toMSKA8allMsku9logM Ska10entriesMskai11inMsaka12aspMaskan13netM Saat14coreMsaat15 pero yoMsaa16lo cubriré en un futuro postMsa17

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la protección de los derechos humanos y las libertades fundamentales, incluidos los derechos económicos, sociales y culturales.

El registro estructurado es una forma de registro que facilita la búsqueda y filtración de los registros. En Serilog se puede hacer esto usando el `Log.Information("This is a log message with {Property1} and {Property2}", property1, property2);` sintaxis. Esto facilita la búsqueda de registros con una propiedad específica.

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Utilizando Serilog también puede usar `LogContext.PushProperty` para añadir propiedades a sus registros que sólo son relevantes para un ámbito concreto. Esto puede ser muy útil en el diagnóstico de problemas en su aplicación.

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Serilog es super flexible en que le permite configurarlo en código así como a través de config.
Por ejemplo, para usar la configuración arriba usted'd hace esto:

```csharp
builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration
        .MinimumLevel.Warning()
        .Enrich.FromLogContext()
        .Enrich.WithThreadId()
        .Enrich.WithThreadName()
        .Enrich.WithProcessId()
        .Enrich.WithProcessName()
        .WriteTo.Seq("http://seq:5341", apiKey: "")
        .WriteTo.Console()
        .WriteTo.File("logs/applog-.txt", rollingInterval: RollingInterval.Day)
        .Enrich.WithProperty("ApplicationName", "mostlylucid");
});

```

Esto es el mismo que la configuración anterior pero en código. Esto es útil si desea configurar su registro en código

# El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la protección de los derechos humanos y las libertades fundamentales, incluidos los derechos económicos, sociales y culturales.

En ASP.NET se pueden usar filtros de excepciones para capturar las exenciones y registrarlas.
Sin embargo, el filtro Exception sólo muestra lo que ocurre una vez que todo el paquete de solicitudes haya sido desvinculado y a menudo puede ser muy confusivo saber qué ha ocurrido.

Esto se ha cambiado en ASP.NET Core 8 y allíM SK2 es un TON que usted puede hacer con estos [El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.](https://learn.microsoft.com/en-us/aspnet/core/fundamentals/error-handling?view=aspnetcore-8.0).

El error vuelve a aplicar los mismos principios; debe registrarse en el nivel de la metodología para poder ver lo que se está pasando en su aplicación en detalle.

# El Presidente (habla en inglés): Doy las gracias al representante de la República Islámica del Irán por su declaración.

Los registros deberían ser apropiados para el entorno; en Desarrollo usted registra todo para poder ver lo que está ocurriendo en cada punto de su aplicación, pero en Test necesita menos registro M SK1puede registrarse Información aquí) y en Producción necesita aún menos (Acuerdo y más arribaMSC4

' es tentador registrar todo en la producción, pero esM SK1 es una mala idea. Debes registrar todo lo que necesitas para diagnosticar un problema, pero no más . En los proveedores de cloud puedes obtener fácilmente cargos por la cantidad de datos que envías al servicio de registro, así que deberías ser cuidadoso con respecto a lo que enscribes y cuánto tiempo conservas estos registros para (Application Insights almacena registros por 90 días por defecto ; esto a menudo es demasiado largo y te costará durante tanto tiempo que los datos de registro se almacenanMSC7

Para una aplicación muy 'activaM SK1 que acabas de ganar' no necesita un registro a largo plazo de esos datos ; tendrás una buena idea de lo que se está produciendo en la aplicación desde los últimos días de registrosMSC6

## El Comité recomienda que el Estado Parte adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Una vez que la cuestión común que veo en la producción es registrar peticiones falladas; mientras que éstas pueden ser interesantes (ninguna persona quiere un 404 / \401) esto puede ser una enorme cantidad de datos y puede ser muy caro almacenarM SK5 solo deberías registrar cosas *El Comité recomienda al Estado Parte que incluya en su próximo informe periódico datos desglosados por sexo, edad y origen étnico.*, para un 404 puede ser que esto sea importante ya que puede indicar un enlace roto en su aplicación

Como ya he mencionado anteriormente, estos se manejan mejor en el código que realmente ocurren en (en el caso de 401); puede ser que también deberían ser registrados como un `Warning` El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer. `Error` en el código que realmente genera el 401.

Para configurar Request Logging en Serilog puedes hacer esto:

```csharp
app.UseSerilogRequestLogging();
```

Esto envía todas las solicitudes a su aplicación.

Para Application Insights todavía puede querer registrarse utilizando el nivel de información, ya que le dará la característica de viaje de usuario de gran calidad; esta es una buena manera de ver cómo los usuarios utilizan su aplicación y puede ser muy útil en el diagnóstico de problemas; sin embargo, de nuevo estos costes se acumulan rápidamente, por lo que debe tener cuidado con lo que usted registra y cuánto tiempo usted mantiene estos registros paraM SK2

# El Comité recomienda al Estado Parte que adopte todas las medidas necesarias para garantizar la igualdad entre los géneros y el empoderamiento de la mujer.

Así que 's es , una rápida introducción de cómo registrarse en ASPM SK2Applications NET. Mucha parte de esto es una reacción a los registros inútiles que veo en muchas aplicaciones de producciónMSC6
En el desarrollo usted quiere ver *cómo se ejecuta la aplicación*; en la producción que desea ver *¿cómo falla la aplicación?*.
El registro es demasiado a menudo inútil, parte costosa del desarrollo de aplicacionesM SK1 Como con todo en el desarrollo de software, el registro debe centrarse en el usuario; ya sea usted MSC3 otros desarrolladores mientras trabajan sobre la aplicación en su IDE / localmente o seleccionando problemas en la producción de forma rápida y eficienteMNK5