# Loggning och diagnostik

QV2QS skriver strukturerade diagnostikloggar vid varje körning. Loggningssystemet har två nivåer: en beständig systemlogg som bevaras mellan körningar, och en strukturerad logg per körning som medföljer konverteringens utdata.

## Systemlogg

QV2QS underhåller en rullande loggfil på en fast plats på disken. Systemloggen startar när den körbara filen startas och registrerar händelser på applikationsnivå oberoende av projekt eller batch.

Plats: `%LOCALAPPDATA%\QV2QS\qv2qs.log`

Systemloggen använder en roterande filhanterare med följande inställningar.

| Inställning | Värde |
| --- | --- |
| Maximal filstorlek | 25 MB |
| Behållna säkerhetskopior | 3 |
| Filmönster | `qv2qs.log`, `qv2qs.log.1`, `qv2qs.log.2`, `qv2qs.log.3` |

När den aktiva loggfilen når 25 MB, roterar QV2QS filen och skapar en ny loggfil. De tre senaste säkerhetskopiorna behålls. Äldre säkerhetskopior raderas automatiskt.

## Strukturerad logg per körning

Varje konverteringskörning genererar en separat loggfil som innehåller detaljerade händelser för den körningen. Filen heter `qv2qs_run_<version>_<timestamp>.log` och är skriven i formatet tabbseparerade värden (TSV) med en JSON-datakolumn.

Standardplats: `%LOCALAPPDATA%\QV2QS\logs\`

I läget för enskilt projekt flyttar QV2QS loggfilen till undermappen `logs/` i projektets utdatamapp (till exempel `<outputDir>/Sales/logs/`) efter att utdatamappen har initierats. Loggfilen inkluderas i konverteringsresultatet.

I batchläge skrivs projektspecifika loggar till undermappen `logs/` i respektive projekts utdatamapp.

### Loggfilsformat

Varje loggfil inleds med en TSV-rubrikrad:

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

| Kolumn | Beskrivning |
| --- | --- |
| `ts_utc` | ISO 8601-tidsmarkör i UTC med millisekundsprecision |
| `level` | Loggnivå: `DEBUG`, `INFO`, `WARNING`, `ERROR` eller `CRITICAL` |
| `version` | QV2QS-version |
| `run_id` | Unik körningsidentifierare i formatet `YYYYMMDD-HHMMSS-<hex>` |
| `logger` | Loggernamn (vanligtvis `qv2qs`) |
| `event` | Sträng för händelsetyp (till exempel `startup`, `conversion_complete`, `batch_local_complete`) |
| `message` | Mänskligt läsbar beskrivning |
| `data` | JSON-objekt med kontextuella nyckel-värde-par |

### Tidsstämpelkollisioner

Om två körningar startar inom samma sekund och genererar samma tidsmarkör lägger QV2QS till `_2`, `_3` eller efterföljande nummer i filnamnet för att undvika överskrivning.

## Vilken logg som ska kontrolleras

QV2QS skriver till två separata loggar i olika skeden av en körning. Systemloggen är alltid tillgänglig. Loggen för varje körning skapas först efter att startinitieringen har slutförts.

| Scenario | Logg att kontrollera först | Varför |
| --- | --- | --- |
| Processen kraschar eller avslutas omedelbart | Systemlogg | Körningsloggen har inte skapats ännu |
| PRJ-genereringen misslyckas innan konverteringen startar | Systemlogg | PRJ-händelser loggas innan utdatakatalogen initieras |
| En batchkörning visar misslyckade filer utan detaljer | Systemlogg | Fel på batchnivå (saknad QlikView Desktop, misslyckade förutsättningar) registreras i systemloggen |
| Konverteringen ger oväntad utdata | Logg per körning i utdatakatalogen | Konverteringsbeslut och varningar på objektnivå registreras i loggen för respektive körning |
| Molndistribution misslyckas | Logg per körning i utdatakatalogen | API-anrop, autentiseringsfel och uppladdningsförlopp registreras i loggen för varje körning |

Anteckning om information

Systemloggen och loggen per körning registrerar samma händelser under överlappningsperioden när båda är aktiva. Systemloggen påbörjas vid processens start. Loggen för varje körning påbörjas efter att kommandoradsargumenten har tolkats och utdatakatalogen har skapats. Om ett fel inträffar innan loggen per körning skapas innehåller endast systemloggen diagnostisk information.

## Loggnivåer

Fem loggnivåer är tillgängliga, listade från mest till minst utförlig.

| Nivå | Beskrivning |
| --- | --- |
| `DEBUG` | Detaljerad diagnostisk information för felsökning |
| `INFO` | Allmänna driftmeddelanden (standard) |
| `WARNING` | Oväntade tillstånd som inte förhindrar konvertering |
| `ERROR` | Fel som påverkar enskilda objekt eller åtgärder |
| `CRITICAL` | Allvarliga fel som stoppar körningen |

Ställ in loggnivån med `--logLevel` eller miljövariabeln `QV2QS_LOG_LEVEL`. CLI-flaggan har företräde när båda är angivna.

Ställ in `--logLevel DEBUG` för att samla in den mest detaljerade utdatan. Poster på felsökningsnivå omfattar konverteringsbeslut, moln-API-anrop, skriptändringar och detaljer om objektbearbetning.

För att aktivera felsökningsloggning utan att ändra kommandoraden, ställ in miljövariabeln innan du kör QV2QS:

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

## Loggrensning

Loggfiler ackumuleras mellan körningar i den permanenta loggkatalogen. Använd `--cleanLogs` för att ta bort loggfiler som är äldre än 30 dagar i början av en körning. Rensningen gäller endast den beständiga loggkatalogen; projektspecifika loggar i utdatakataloger påverkas inte.

## Maskering av hemligheter

Loggposter maskerar automatiskt känsliga värden. API-nycklar, tokens, lösenord och klienthemligheter maskeras så att endast de fyra sista tecknen visas. Kommandoradsargument som innehåller hemligheter maskeras också när de loggas.

## QlikView Desktop-motorloggning

När PRJ-generering är aktiverad loggar QV2QS vilken QlikView Desktop-motor som används för varje fil. Logghändelsen `prj_generate_start` registrerar huruvida den medföljande portabla motorn eller en systeminstallerad version är aktiv och inkluderar den medföljande körbara filens filversion när den är tillgänglig.

Efter att kopplingen till QlikView Desktop har upprättats registrerar händelsen `prj_qv_ready` den QlikView-version som rapporteras av motorn som körs (till exempel `12.100.20100.0`). När den medföljande motorn används registrerar fältet `exe_file_version` filversionen som lästs från den körbara filen.

I batchläge registrerar logghändelsen `prj_batch_prereq` motorvalet och den medföljande versionen för hela batchen innan några filer bearbetas. Om varken en medföljande motor eller en systeminstallation är tillgänglig loggas felet som `prj_batch_no_qv` i systemloggen.

Ange `--logLevel DEBUG` för att registrera detaljerade steg för motorupplösning, inklusive de filsökvägar som kontrolleras under motoridentifieringen.

## Konsolutdata jämfört med filloggning

Konsolutdata och filloggning är oberoende system.

| Aspekt | Konsol | Fillogg |
| --- | --- | --- |
| Format | Formaterad text med valfria färger och spinners | Strukturerad TSV med JSON-data |
| Styrs av | `--console pretty\\|plain\\|silent\\|ui` | `--logLevel`, `--logDir` |
| Innehåll | Användarriktade förlopp och resultat | Fullständiga diagnostikhändelser |
| Hemlighetsmaskering | Ej tillämpligt | Tillämpas automatiskt |

Konsolutdata visas inte i loggfilerna. Flaggan `--console silent` undertrycker konsolutdata utan att påverka filloggning.

## CLI-argument

| Argument | Beskrivning | Standard |
| --- | --- | --- |
| `--logLevel LEVEL` | Loggningsdetaljnivå: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` | `INFO` |
| `--logDir FOLDER` | Åsidosätt utdatamappen för loggar per körning. Relativa sökvägar utgår från den aktuella arbetskatalogen, inte från utdatakatalogen. Påverkar inte den permanenta systemloggen på `%LOCALAPPDATA%`. | `%LOCALAPPDATA%\QV2QS\logs\` (enskilt projekt) eller `<outputDir>/logs/` (batch) |
| `--cleanLogs` | Ta bort loggfiler som är äldre än 30 dagar före körningen | Av |

## Läs mer

* [Argumentreferens](https://help.qlik.com/sv-SE/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)
* [Felsökning](https://help.qlik.com/sv-SE/migration/Content/Qv2qsMigration/troubleshooting/index.htm)