Introducción
A partir de la versión 4.4.2200.28 se incluye una nuevo módulo de gestión de Logs por fichero. Hasta el momento el sistema de Logs se llevaba a cabo registrando los errores de inicialización y ejecución de la API en el Visor de Eventos de Windows.
Sin embargo, dado que esta gestión no cubre todas las necesidades reales de depuración y no es legible e interpretable de manera sencilla, se opta por incluir una nueva metodología que se detalla en el presente documento.
Fichero de configuración
El control y configuración del nuevo módulo incluido en AHORA API, se lleva a cabo desde el propio fichero de configuración appsettings.json.
La diferencia principal entre versiones anteriores y la nueva versión en la eliminación del nodo Logging y la inclusión de un nuevo nodo "Serilog".
"Serilog": {
"ManualLog": "False",
"MinimumLevel": {
"Default": "Warning",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Microsoft.AspNetCore" : "Warning"
}
}
}
En este nuevo nodo se distingue dos secciones:
- "ManualLog": que acepta valores "True" y "False", capitalizados.
- "MinimumLevel": donde se define el mínimo nivel de mensajes que se incluirán en el log generado.
El primer elemento se utiliza para habilitar la inclusión manual de mensajes. Un valor igual a True (la modificación de este valor no requiere un reinicio de la API) incluirá determinados mensajes gestionados de forma manual y de tipo Warning. Es una forma rápida de incluir las llamadas a procedimientos almacenados, mensajes de sincronización de la TPV Offline y consultas a vistas y tablas sin necesidad de modificar el nivel mínimo de errores. Es decir, se incluye un registro por cada llamada relevante, incluyendo los parámetros que recibe la llamada.
La diferencia con el segundo tipo es que al modificar el valor mínimo a valores diferentes de Warning (por ejemplo, Debug), se incluirán todas las llamadas a la API, sean o no sean "útiles".
Ejemplo: Una API con valor True en "ManualLog" no incluirá las llamadas a la obtención de Token o login, mientras que establecer un valor por defecto de "MinimuLevel" a Information, sí las incluirá.
Los posibles valores mínimos que se pueden especificar son (siempre respetando mayúsculas y minúsculas):
- Verbose: el nivel con más información y mayor "ruido", incluirá muchas llamadas de relleno.
- Debug: usado para loguear los eventos internos de sistema, útil para depurar comportamientos anómalos.
- Information: eventos de tipo información, normalmente son todas las llamadas que se gestionan de forma correcta.
- Warning: eventos que se lanzan cuando la API entra en un estado inconsistente o la conducta es diferente a la esperada. También se ha usado como base para los mensajes que se generan de forma manual en caso de habilitar el campo "ManualLog".
- Error: eventos de error.
- Fatal: eventos que hacen que la API se pare. Este evento podría dar, por ejemplo, al ser incapaz de inicializar la API.
Estos valores son escalables, es decir, se mostrarán los mensajes del tipo establecido y superiores. Por defecto, el valor en un entorno de producción será "Warning", de manera que sólo mensajes de tipo Warning, Error y Fatal se grabarán en el fichero.
Fichero de Log
Para facilitar la gestión del log con editores avanzados, el fichero generado se escribe en formato JSON.
El fichero del log se crea, por defecto, en una carpeta Logs que se creará de forma automática la primera vez que se intente añadir un registro nuevo. Esta carpeta se crea en la propia raíz de instalación de la API, normalmente en "C:\Program Files\AHORA\AHORA API\NombreAPI", de forma que será necesario que el usuario que ejecute el servicio de la API tenga permisos de escritura sobre la propia carpeta de instalación.
DATO: En caso de que no se genere automáticamente y no se quiera dar permisos al usuario de la API, será el usuario que instale la API el que tenga que crearla de forma manual, dando permisos de escritura para TODOS o para el pseudogrupo "Usuarios autentificados".
El fichero generado es autoincremental con una periodicidad de un día, es decir, se creará uno nuevo por cada día natural. El nombre, por tanto, será similar a "Log20200414.json", siendo la parte numérica la correspondiente a Año-Mes-Día.