# Registro y diagnóstico

QV2QS escribe registros de diagnóstico estructurados durante cada ejecución. El sistema de registro cuenta con dos niveles: un registro persistente del sistema que perdura entre ejecuciones y un registro estructurado por ejecución que se incluye con el resultado de la conversión.

## Registro del sistema

QV2QS mantiene un archivo de registro rotativo en una ubicación fija en el disco. El registro del sistema se inicia cuando se inicia el ejecutable y registra eventos a nivel de aplicación independientemente de cualquier proyecto o lote.

Ubicación: `%LOCALAPPDATA%\QV2QS\qv2qs.log`

El registro del sistema utiliza un controlador de archivos rotativo con la siguiente configuración.

| Configuración | Valor |
| --- | --- |
| Tamaño máximo de archivo | 25 MB |
| Archivos de copia de seguridad conservados | 3 |
| Patrón de archivo | `qv2qs.log`, `qv2qs.log.1`, `qv2qs.log.2`, `qv2qs.log.3` |

Cuando el archivo de registro activo alcanza los 25 MB, QV2QS rota el archivo y crea un nuevo archivo de registro. Se conservan las tres copias de seguridad más recientes. Las copias de seguridad más antiguas se eliminan automáticamente.

## Registro estructurado por ejecución

Cada ejecución de conversión genera un archivo de registro independiente que contiene eventos detallados de esa ejecución. El archivo se llama `qv2qs_run_<version>_<timestamp>.log` y está escrito en formato de valores separados por tabulaciones (TSV) con una columna de datos JSON.

Ubicación predeterminada: `%LOCALAPPDATA%\QV2QS\logs\`

En el modo de proyecto único, QV2QS traslada el archivo de registro a la subcarpeta `logs/` de la carpeta de salida del proyecto (por ejemplo, `<outputDir>/Sales/logs/`) después de que se inicialice la carpeta de salida. El archivo de registro se incluye en la salida de la conversión.

En el modo por lotes, los registros por proyecto se escriben en la subcarpeta `logs/` dentro de la carpeta de salida de cada proyecto.

### Formato de archivo de registro

Cada archivo de registro comienza con una fila de encabezado TSV:

```
ts_utc	level	version	run_id	logger	event	message	data
```

| Columna | Descripción |
| --- | --- |
| `ts_utc` | Marca de tiempo ISO 8601 en UTC con precisión de milisegundos |
| `level` | Nivel de registro: `DEBUG`, `INFO`, `WARNING`, `ERROR` o `CRITICAL` |
| `version` | Versión de QV2QS |
| `run_id` | Identificador único de ejecución con el formato `YYYYMMDD-HHMMSS-<hex>` |
| `logger` | Nombre del registrador (normalmente `qv2qs`) |
| `event` | Cadena de tipo de evento (por ejemplo, `startup`, `conversion_complete`, `batch_local_complete`) |
| `message` | Descripción legible por humanos |
| `data` | Objeto JSON con pares clave-valor contextuales |

### Colisiones de marcas de tiempo

Si dos ejecuciones se inician en el mismo segundo y generan la misma marca de tiempo, QV2QS añade `_2`, `_3` o números posteriores al nombre del archivo para evitar que se sobrescriba.

## Qué registro revisar

QV2QS escribe en dos registros independientes en distintas fases de una ejecución. El registro del sistema siempre está disponible. El registro por ejecución solo se crea una vez completada la inicialización del arranque.

| Escenario | Registro que comprobar primero | Por qué |
| --- | --- | --- |
| El proceso se bloquea o finaliza inmediatamente | Registro del sistema | El registro por ejecución aún no se ha creado |
| La generación de PRJ falla antes de que comience la conversión | Registro del sistema | Los eventos PRJ se registran antes de que se inicialice el directorio de salida |
| Una ejecución por lotes muestra archivos con errores sin detalles | Registro del sistema | Los errores a nivel de lote (ausencia de QlikView Desktop, fallos de requisitos previos) se registran en el registro del sistema |
| La conversión produce un resultado inesperado | Registro por ejecución en el directorio de salida | Las decisiones de conversión a nivel de objeto y las advertencias se registran en el registro de cada ejecución |
| El despliegue en la nube falla | Registro por ejecución en el directorio de salida | Las llamadas a la API, los errores de autenticación y el progreso de la subida se registran en el registro de cada ejecución. |

Nota informativa

El registro del sistema y el registro por ejecución registran los mismos eventos durante el periodo de solapamiento cuando ambos están activos. El registro del sistema comienza con el lanzamiento del proceso. El registro de cada ejecución comienza después de que se analicen los argumentos de la línea de comandos y se cree el directorio de salida. Si se produce un error antes de que se cree el registro por ejecución, solo el registro del sistema contiene información de diagnóstico.

## Niveles de registro

Hay cinco niveles de registro disponibles, enumerados de mayor a menor nivel de detalle.

| Nivel | Descripción |
| --- | --- |
| `DEBUG` | Información de diagnóstico detallada para solucionar problemas |
| `INFO` | Mensajes operativos generales (predeterminado) |
| `WARNING` | Condiciones inesperadas que no impiden la conversión |
| `ERROR` | Fallos que afectan a objetos u operaciones individuales |
| `CRITICAL` | Fallos graves que detienen la ejecución |

Establezca el nivel de registro con `--logLevel` o con la variable de entorno `QV2QS_LOG_LEVEL`. El indicador de la CLI tiene prioridad cuando ambos están establecidos.

Establezca `--logLevel DEBUG` para capturar la salida más detallada. Las entradas de nivel de depuración incluyen decisiones de conversión, llamadas a la API en la nube, modificaciones de scripts y detalles del procesamiento de objetos.

Para habilitar el registro de depuración sin modificar la línea de comandos, establezca la variable de entorno antes de ejecutar QV2QS:

```
set QV2QS_LOG_LEVEL=DEBUG
QV2QS.exe --prjPath ./MyApp-prj --outputDir ./output --qvw MyApp.qvw --unbuildOnly
```

## Limpieza de registros

Los archivos de registro se acumulan entre ejecuciones en el directorio de registro persistente. Utilice `--cleanLogs` para eliminar los archivos de registro con más de 30 días de antigüedad al inicio de una ejecución. La limpieza solo se aplica al directorio de registros persistente; los registros por proyecto en los directorios de salida no se ven afectados.

## Enmascaramiento de secretos

Las entradas de registro enmascaran automáticamente los valores confidenciales. Las claves de API, los tokens, las contraseñas y los secretos de cliente se enmascaran para mostrar únicamente los últimos cuatro caracteres. Los argumentos de la línea de comandos que contienen secretos también se enmascaran cuando se registran.

## Registro del motor de QlikView Desktop

Cuando la generación de PRJ está habilitada, QV2QS registra qué motor de QlikView Desktop se utiliza para cada archivo. El evento de registro `prj_generate_start` registra si está activo el motor portátil integrado o una versión instalada en el sistema, e incluye la versión de archivo del ejecutable integrado cuando está disponible.

Una vez establecida la conexión con QlikView Desktop, el evento `prj_qv_ready` registra la versión de QlikView notificada por el motor en ejecución (por ejemplo, `12.100.20100.0`). Cuando se utiliza el motor integrado, el campo `exe_file_version` registra la versión del archivo leída del ejecutable.

En el modo por lotes, el evento de registro `prj_batch_prereq` registra la selección del motor y la versión integrada para todo el lote antes de que se procese ningún archivo. Si no está disponible ni un motor integrado ni una instalación del sistema, el error se registra como `prj_batch_no_qv` en el registro del sistema.

Establezca `--logLevel DEBUG` para capturar los pasos detallados de resolución del motor, incluidas las rutas de archivo comprobadas durante la detección del motor.

## Salida por consola frente a registro en archivo

La salida por consola y el registro en archivo son sistemas independientes.

| Aspecto | Consola | Registro de archivo |
| --- | --- | --- |
| Formato | Texto con formato con colores e indicadores giratorios opcionales | TSV estructurado con datos JSON |
| Controlado por | `--console pretty\\|plain\\|silent\\|ui` | `--logLevel`, `--logDir` |
| Contenido | Progreso y resultados orientados al usuario | Eventos de diagnóstico completos |
| Enmascaramiento de secretos | No aplicable | Aplicado automáticamente |

La salida de la consola no aparece en los archivos de registro. El indicador `--console silent` suprime la salida por consola sin afectar al registro en archivo.

## Argumentos de la CLI

| Argumento | Descripción | Predeterminado |
| --- | --- | --- |
| `--logLevel LEVEL` | Nivel de detalle del registro: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` | `INFO` |
| `--logDir FOLDER` | Sobrescribir la carpeta de salida de registros por ejecución. Las rutas relativas se resuelven desde el directorio de trabajo actual, no desde el directorio de salida. No afecta al registro persistente del sistema en `%LOCALAPPDATA%`. | `%LOCALAPPDATA%\QV2QS\logs\` (proyecto único) o `<outputDir>/logs/` (por lotes) |
| `--cleanLogs` | Eliminar los archivos de registro con más de 30 días de antigüedad antes de la ejecución | Desactivado |

## Más información

* [Referencia de argumentos](https://help.qlik.com/es-ES/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)
* [Resolución de problemas](https://help.qlik.com/es-ES/migration/Content/Qv2qsMigration/troubleshooting/index.htm)