# Rozwiązywanie problemów

> Objawy, na które najprawdopodobniej natkniesz się podczas konwersji dzienników debugowania DNS, co je powoduje i jak je naprawić.

---

LLMS index: [llms.txt](/llms.txt)

---

## „Plik nie jest prawidłowym plikiem dziennika debugowania DNS”

Sprawdzenie nagłówka odrzuciło dane wejściowe. Zwykle ścieżka jest po prostu błędna — plik `.log` w tym samym folderze, który nie jest dziennikiem debugowania DNS, lub plik zawierający tylko obrócony nagłówek.

Przejdź przez to krok po kroku:

1. Otwórz plik. Dziennik debugowania DNS zaczyna się od linii nagłówka takiej jak `Message logging started at …` i zawiera wpisy zapytań z oznaczeniem czasu.
2. Potwierdź, że debugowanie DNS jest faktycznie włączone i zapisuje do oczekiwanej ścieżki:

   ```powershell
   Get-DnsServerDiagnostics | Select-Object Enable, LogFilePath, MaxMBFileSize
   ```

3. Jeśli plik faktycznie jest dziennikiem DNS, ale nagłówek jest nietypowy — ręcznie edytowany, wstępnie filtrowany, niestandardowy eksport — pomiń sprawdzanie:

   ```powershell
   Convert-DNSDebugLogFile -InputFile "C:\Logs\odd.log" -SkipHeaderValidation
   ```

Zachowaj weryfikację w pozostałych miejscach. Pamiętaj, że `-SkipHeaderValidation` nie może być łączone z `-RemoveSourceFile`, więc niezweryfikowany plik nigdy nie zostanie usunięty podczas konwersji.

## Plik wyjściowy jest pusty lub ma znacznie mniej wierszy niż oczekiwano

Sprawdź kolejno:

- **Czy dziennik w ogóle zawiera wpisy zapytań?** Świeżo obrócony dziennik może zawierać tylko nagłówek, jeśli jeszcze nie było zapytań.
- **Czy używasz `-ContextFilter`?** `-ContextFilter Packet` usuwa wpisy `Event` i `Note` zgodnie z założeniem. Jeśli filtrowałeś do `Event` lub `Note`, większość kolumn będzie pusta — te typy wpisów zawierają tylko `DateTime`, `ThreadId`, `Context` i `Information`.
- **Czy dziennik źródłowy był aktywny?** Plik, do którego DNS Server nadal zapisuje, może się zmieniać podczas konwersji; najnowsze wpisy mogą być nieobecne, a ostatni rekord może być obcięty. Konwertuj obrócony, zamknięty dziennik, gdy potrzebujesz kompletnego wyniku.
- **Czy plik jest uszkodzony lub obcięty?** Sprawdź koniec dziennika pod kątem niedokończonej linii.

## Daty są błędne, przesunięte lub dzień i miesiąc są zamienione miejscami

Dziennik został zapisany przez serwer z inną lokalizacją Windows niż sesja wykonująca konwersję. `20.01.2026` i `01/20/2026` opisują ten sam moment, ale tylko jeśli obie strony zgadzają się co do formatu.

```powershell
# dziennik pochodzi z niemieckiego serwera
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns-berlin.log" -InputCulture 'de-DE'
```

Ustaw `-InputCulture` jawnie w zadaniach zaplanowanych, zamiast polegać na kulturze konta, które je uruchamia. Jeśli wynik ma być czytelny dla maszyny, dodaj `-OutputCulture 'sv-SE'`. Szczegóły w [Parametry i opcje](../03-parameters-and-options/).

## Wszystko trafia do jednej kolumny po imporcie

Niezgodność separatora. Moduł domyślnie używa `;`; twój program oczekiwał `,` (lub odwrotnie).

Albo uruchom konwersję ponownie z separatorem, którego oczekuje odbiorca:

```powershell
Convert-DNSDebugLogFile -InputFile "C:\Logs\dns.log" -Delimiter ","
```

…albo powiedz importerowi, jaki separator ma plik — w Excelu przez **Dane → Z tekstu/CSV**, w PowerShell przez `Import-Csv -Delimiter ';'`.

## „Odmowa dostępu”

- Katalog dzienników DNS zwykle wymaga uprawnień administratora. Uruchom PowerShell jako administrator lub uruchom zadanie zaplanowane na koncie z dostępem.
- Sprawdź także uprawnienia zapisu do katalogu wyjściowego, nie tylko odczytu dziennika.
- Dla ścieżek SMB/UNC: zadanie uruchamiane jako `SYSTEM` uwierzytelnia się w sieci jako **konto komputera**. Przyznaj prawa udziału i NTFS temu kontu komputera (lub grupie `Domain Controllers`), albo użyj dedykowanego konta usługi.
- Jeśli `-RemoveSourceFile` nie powiodło się na końcu pomyślnego przebiegu, konto może czytać dziennik, ale nie może go usunąć.

## Przetwarzanie jest bardzo wolne

1. Najpierw dysk — konwersja jest ograniczona przez I/O. Obciążony wolumin lub wolna ścieżka sieciowa dominują czas działania.
2. Użyj `-NoDetailsParsing`, jeśli nie potrzebujesz szczegółów pakietu w formacie JSON; na dziennikach z dużą ilością szczegółów oszczędza to 30–50%.
3. Użyj `-ContextFilter Packet`, aby zapisać mniej danych.
4. Dziel ogromne dzienniki przez obrót dzienników DNS Server zamiast konwertować jeden ogromny plik.
5. Rozważ wykluczenie katalogu dzienników z antywirusa.

Więcej w [Wydajność](../04-performance/).

## Skompresowany plik wyjściowy jest większy niż oczekiwano

Dzienniki o bardzo różnorodnej zawartości — wiele unikalnych domen, wielu różnych klientów — kompresują się gorzej niż powtarzalne. To normalne. ZIP zwykle i tak osiąga znaczną redukcję; jeśli nie, sprawdź, czy kolumna `Details` nie powiększa pliku i czy w ogóle jej potrzebujesz.

## Statystyki nie zgadzają się z oczekiwaniami

- Potwierdź, że użyłeś `-OutputType Both` lub `-OutputType Statistic`. Przy `-OutputType CSV` pliki statystyk nie są w ogóle zapisywane.
- `Count` to suma, nie liczba unikalna. Jeden klient pytający o tę samą nazwę 500 razy daje 500. To najczęstsza przyczyna „ta liczba nie może być prawidłowa”.
- Statystyki są grupowane na dni. Dziennik obejmujący dwa dni daje wiersze dla obu.
- Jeśli `ComputerName` jest pusty w plikach statystyk, podczas konwersji nie ustawiono `-ComputerName`.

## Zadanie zaplanowane działa interaktywnie, ale nie jako zadanie

Prawie zawsze jedna z trzech rzeczy:

- **Moduł nie znaleziony.** `SYSTEM` z `-NoProfile` widzi tylko ścieżki modułów globalnych. Zainstaluj moduł globalnie lub dodaj jawne `Import-Module DNSServer.DebugLogParser` do akcji zadania.
- **Zła kultura.** Lokalizacja konta zadania różni się od twojej. Ustaw jawnie `-InputCulture` i `-OutputCulture`.
- **Polityka wykonania lub niepodpisany skrypt.** Dopasuj `-ExecutionPolicy` zadania do swojej polityki podpisywania i odblokuj pliki skopiowane z innych miejsc.

Uruchom dokładną linię poleceń zadania ręcznie w tym samym kontekście (np. z PsExec jako `SYSTEM`), aby odtworzyć problem.

## Zgłaszanie problemu

Jeśli nic z powyższego nie pomaga:

1. Zaktualizuj moduł do najnowszej wersji i spróbuj ponownie.
2. Przeszukaj [GitHub issues](https://github.com/AndiBellstedt/DNSServer.DebugLogParser/issues) pod kątem tego samego objawu.
3. Zbierz diagnostykę:

   ```powershell
   $PSVersionTable
   Get-Module DNSServer.DebugLogParser -ListAvailable | Select-Object Name, Version, Path
   Get-Culture
   ```

   oraz dokładne polecenie, które wykonałeś, pełny komunikat błędu wraz ze śladem stosu i — jeśli możesz udostępnić — mały zanonimizowany fragment dziennika, który odtwarza problem.
4. Otwórz nowe zgłoszenie z tymi informacjami.
