# Logowanie i diagnostyka

QV2QS zapisuje ustrukturyzowane dzienniki diagnostyczne podczas każdego uruchomienia. System logowania ma dwie warstwy: trwały dziennik systemowy, który zachowuje się po kolejnych uruchomieniach, oraz strukturalny dziennik dla każdego uruchomienia, który jest dostarczany wraz z wynikami konwersji.

## Dziennik systemowy

QV2QS utrzymuje cykliczny plik dziennika w stałej lokalizacji na dysku. Dziennik systemowy rozpoczyna się wraz z uruchomieniem pliku wykonywalnego i rejestruje zdarzenia na poziomie aplikacji niezależnie od projektu lub partii.

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

Dziennik systemowy używa obrotowego modułu obsługi plików z następującymi ustawieniami.

| Ustawienie | Wartość |
| --- | --- |
| Maksymalny rozmiar pliku | 25 MB |
| Zachowane pliki kopii zapasowych | 3 |
| Wzór pliku | `qv2qs.log`, `qv2qs.log.1`, `qv2qs.log.2`, `qv2qs.log.3` |

Gdy aktywny plik dziennika osiągnie 25 MB, QV2QS obraca plik i tworzy nowy plik dziennika. Zachowywane są trzy najnowsze kopie zapasowe. Starsze kopie zapasowe są usuwane automatycznie.

## Log strukturalny dla każdego uruchomienia

Każde uruchomienie konwersji generuje oddzielny plik dziennika zawierający szczegółowe zdarzenia dla tego uruchomienia. Plik nosi nazwę `qv2qs_run_<version>_<timestamp>.log` i jest zapisany w formacie wartości rozdzielanych tabulatorami (TSV) z kolumną danych JSON.

Domyślna lokalizacja: `%LOCALAPPDATA%\QV2QS\logs\`

W trybie pojedynczego projektu, QV2QS przenosi plik dziennika do `logs/` podfolderu folderu wyjściowego projektu (na przykład, `<outputDir>/Sales/logs/`) po zainicjowaniu folderu wyjściowego. Plik dziennika jest dołączony do danych wyjściowych konwersji.

W trybie wsadowym dzienniki dla poszczególnych projektów są zapisywane w podfolderze `logs/` w każdym folderze wyjściowym projektu.

### Format pliku dziennika

Każdy plik dziennika zaczyna się od wiersza nagłówka TSV:

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

| Kolumna | Opis |
| --- | --- |
| `ts_utc` | ISO 8601 znacznik czasu w UTC z milisekundową precyzją |
| `level` | Poziom logowania: `DEBUG`, `INFO`, `WARNING`, `ERROR`, lub `CRITICAL` |
| `version` | QV2QS wersja |
| `run_id` | Unikatowy identyfikator uruchomienia w formacie `YYYYMMDD-HHMMSS-<hex>` |
| `logger` | Nazwa rejestratora (zazwyczaj `qv2qs`) |
| `event` | Ciąg typu zdarzenia (na przykład, `startup`, `conversion_complete`, `batch_local_complete`) |
| `message` | Opis czytelny dla człowieka |
| `data` | Obiekt JSON z kontekstowymi parami klucz-wartość |

### Kolizje znaczników czasu

Jeśli dwa uruchomienia rozpoczną się w tej samej sekundzie i wygenerują ten sam znacznik czasu, aplikacja QV2QS dołącza `_2`, `_3`, lub kolejne numery do nazwy pliku, aby uniknąć nadpisania.

## Który dziennik sprawdzić

QV2QS zapisuje do dwóch oddzielnych dzienników na różnych etapach przebiegu. Dziennik systemowy jest zawsze dostępny. Dziennik uruchomienia jest tworzony dopiero po zakończeniu inicjalizacji startowej.

| Scenariusz | Najpierw sprawdź log | Dlaczego |
| --- | --- | --- |
| Proces ulega awarii lub natychmiast się zamyka | Dziennik systemowy | Dziennik przebiegu nie został jeszcze utworzony |
| Generowanie PRJ kończy się niepowodzeniem przed rozpoczęciem konwersji | Dziennik systemowy | Zdarzenia PRJ są logowane, zanim katalog wyjściowy zostanie zainicjowany. |
| Przebieg wsadowy pokazuje nieudane pliki bez szczegółów | Dziennik systemowy | Błędy na poziomie partii (brak QlikView Desktop, niepowodzenia wymagań wstępnych) są rejestrowane w dzienniku systemowym |
| Konwersja generuje nieoczekiwane dane wyjściowe | Log dla każdego uruchomienia w katalogu wyjściowym | Decyzje dotyczące konwersji na poziomie obiektu i ostrzeżenia są rejestrowane w dzienniku dla każdego uruchomienia |
| Wdrożenie w chmurze nie powiodło się | Log dla każdego uruchomienia w katalogu wyjściowym | Wywołania API, błędy uwierzytelniania oraz postęp przesyłania są rejestrowane w dzienniku przebiegu. |

Informacja

Dziennik systemowy i dziennik przebiegu rejestrują te same zdarzenia w okresie nakładania się, gdy oba są aktywna. Dziennik systemowy rozpoczyna się wraz z uruchomieniem procesu. Dziennik dla pojedynczego uruchomienia rozpoczyna się po przetworzeniu argumentów wiersza poleceń i utworzeniu katalogu wyjściowego. Jeśli awaria wystąpi przed utworzeniem dziennika uruchomienia, tylko dziennik systemowy zawiera informacje diagnostyczne.

## Poziomy logowania

Pięć poziomów logowania jest dostępnych, wymienionych od najbardziej do najmniej szczegółowego.

| Poziom | Opis |
| --- | --- |
| `DEBUG` | Szczegółowe informacje diagnostyczne na potrzeby rozwiązywania problemów |
| `INFO` | Ogólne komunikaty operacyjne (domyślne) |
| `WARNING` | Nieoczekiwane warunki, które nie uniemożliwiają konwersji |
| `ERROR` | Awarie, które dotyczą poszczególnych obiektów lub operacji |
| `CRITICAL` | Poważne awarie, które zatrzymują wykonanie |

Ustaw poziom logowania za pomocą `--logLevel` lub `QV2QS_LOG_LEVEL` zmiennej środowiskowej. Flaga CLI ma pierwszeństwo, gdy obie są ustawione.

Ustaw `--logLevel DEBUG`, aby przechwycić najbardziej szczegółowe dane wyjściowe. Wpisy na poziomie debugowania obejmują decyzje konwersji, wywołania API chmury, modyfikacje skryptów oraz szczegóły przetwarzania obiektów.

Aby włączyć logowanie debugowania bez modyfikowania wiersza poleceń, ustaw zmienną środowiskową przed uruchomieniem QV2QS:

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

## Czyszczenie logów

Pliki dziennika gromadzą się podczas kolejnych uruchomień w trwałym katalogu dziennika. Użyj `--cleanLogs`, aby usunąć pliki dziennika starsze niż 30 dni na początku uruchomienia. Czyszczenie dotyczy wyłącznie katalogu trwałych dzienników; dzienniki poszczególnych projektów w katalogach wyjściowych pozostają nienaruszone.

## Maskowanie sekretów

Wpisy w dzienniku automatycznie maskują wrażliwe wartości. Klucze API, tokeny, hasła i sekrety klienta są maskowane, aby pokazać tylko ostatnie cztery znaki. Argumenty wiersza poleceń zawierające sekrety są również maskowane podczas logowania.

## Logowanie silnika QlikView Desktop

Gdy generowanie PRJ jest włączone, QV2QS rejestruje, który silnik QlikView Desktop jest używany dla każdego pliku. Zdarzenie dziennika `prj_generate_start` rejestruje, czy aktywna jest dołączona przenośna wersja silnika, czy też wersja zainstalowana w systemie, i zawiera wersję pliku dołączonego pliku wykonywalnego, jeśli jest dostępna.

Po nawiązaniu połączenia z QlikView Desktop, zdarzenie `prj_qv_ready` rejestruje wersję QlikView zgłoszoną przez działający silnik (na przykład, `12.100.20100.0`). Gdy używany jest dołączony silnik, pole `exe_file_version` rejestruje wersję pliku odczytaną z pliku wykonywalnego.

W trybie wsadowym, zdarzenie dziennika `prj_batch_prereq` rejestruje wybór silnika i dołączoną wersję dla całej partii, zanim jakiekolwiek pliki zostaną przetworzone. Jeśli ani dołączony silnik, ani instalacja systemowa nie są dostępne, błąd jest rejestrowany jako `prj_batch_no_qv` w dzienniku systemowym.

Ustaw `--logLevel DEBUG`, aby przechwycić szczegółowe kroki rozwiązywania problemów z silnikiem, w tym ścieżki plików sprawdzane podczas wykrywania silnika.

## Wyjście konsoli a logowanie do pliku

Dane wyjściowe konsoli i logowanie do pliku to niezależne systemy.

| Aspekt | Konsola | Dziennik plików |
| --- | --- | --- |
| Format | Sformatowany tekst z opcjonalnymi kolorami i wskaźnikami postępu | Ustrukturyzowany TSV z danymi JSON |
| Kontrolowane przez | `--console pretty\\|plain\\|silent\\|ui` | `--logLevel`, `--logDir` |
| Zawartość | Postęp i wyniki widoczne dla użytkownika | Kompletne zdarzenia diagnostyczne |
| Tajne maskowanie | Nie dotyczy | Zastosowano automatycznie |

Dane wyjściowe konsoli nie pojawiają się w plikach dziennika. Flaga `--console silent` wyłącza wyświetlanie w konsoli, nie wpływając na logowanie do pliku.

## Argumenty CLI

| Argument | Opis | Domyślny |
| --- | --- | --- |
| `--logLevel LEVEL` | Szczegółowość logów: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` | `INFO` |
| `--logDir FOLDER` | Zastąp folder wyjściowy dziennika dla każdego uruchomienia. Ścieżki względne są interpretowane względem bieżącego katalogu roboczego, a nie katalogu wyjściowego. Nie wpływa na trwały dziennik systemowy w `%LOCALAPPDATA%`. | `%LOCALAPPDATA%\QV2QS\logs\` (pojedynczy projekt) lub `<outputDir>/logs/` (wsadowo) |
| `--cleanLogs` | Usuń pliki dziennika starsze niż 30 dni przed uruchomieniem | Wył. |

## Dowiedz się więcej

* [Odwołanie do argumentu](https://help.qlik.com/pl-PL/migration/Content/Qv2qsMigration/command-line-interface/argument-reference.htm)
* [Rozwiązywanie problemów z](https://help.qlik.com/pl-PL/migration/Content/Qv2qsMigration/troubleshooting/index.htm)