Prosta aplikacja webowa do parsowania i analizy logów konsolowych Spring Boota (ArgoCD / GKE). Działa w całości lokalnie w przeglądarce — nie wymaga instalacji, serwera, runtime'u ani internetu. Żadne dane nie opuszczają komputera.
- Rozpakuj folder w dowolne miejsce (np.
C:\Narzedzia\log-analyzer\). - Kliknij dwukrotnie
index.html. - Kliknij Otwórz plik… i wskaż swój
.log(albo przeciągnij plik na okno, albo wklej fragment przyciskiem Wklej).
Oba pliki muszą leżeć w tym samym folderze:
index.html ← cała aplikacja (jQuery i Bootstrap wbudowane, działa offline)
patterns.js ← konfiguracja: profile parsowania + biblioteka wzorców błędów
Jeśli patterns.js zniknie albo będzie miał błąd składni, aplikacja użyje
wbudowanej kopii domyślnej — nic się nie zepsuje.
Zalecana przeglądarka: Chrome lub Edge (dowolna nowa wersja).
Parsowanie z konfigurowalnym schematem. Domyślny profil to JSON-per-linia
(timestampSeconds + timestampNanos, severity, thread, logger,
message, context). Drugi profil obsługuje klasyczny tekstowy format
Logbacka wraz ze sklejaniem wielolinijkowych stack trace'ów w jeden wpis.
Przy otwieraniu pliku aplikacja sama wykrywa pasujący profil (próbuje
sparsować próbkę linii); możesz go też wybrać ręcznie w pasku górnym — plik
zostanie od razu przeparsowany na nowo.
Preambuła. Linie, które nie pasują do profilu (logi vault_init.sh,
Supervisord, wewnętrzna inicjalizacja Logbacka, baner ASCII Spring Boota),
trafiają do osobnego, zwijanego panelu nad listą i są tam kolorowane wg typu —
zamiast zaśmiecać główną tabelę.
Rozpoznawanie znanych błędów. Każdy wpis jest sprawdzany względem biblioteki wzorców; dopasowanie widać jako plakietkę na liście, a w panelu szczegółów pojawia się opis przyczyny i podpowiedź, co sprawdzić.
Najgłębszy Caused by:. Dla wpisów ze stack trace aplikacja wyciąga
ostatni element łańcucha Caused by: i pokazuje go osobno jako prawdopodobną
prawdziwą przyczynę.
Filtry. Poziom logowania, wyszukiwanie tekstowe lub regex (z podświetlaniem trafień), logger, wątek, zakres czasowy, wzorzec błędu.
Reszta. Statystyki pliku (wg poziomu, top loggery/wątki/wzorce, rozkład
godzinowy), eksport przefiltrowanego widoku do .log / .txt / .csv /
.json, przełącznik czasu lokalnego i UTC, przeciąganie podziału
lista/szczegóły, przyrostowe renderowanie tabeli (duże pliki nie zamrażają UI).
| Skrót | Działanie |
|---|---|
↑ / ↓ |
poprzedni / następny wpis |
Ctrl+F |
kursor w polu wyszukiwania |
Ctrl+O |
otwórz plik |
Otwórz patterns.js w Notatniku i dopisz kolejny obiekt do tablicy
window.LOG_PATTERNS:
{
id: 'moj-wzorzec',
name: 'Krótka nazwa na liście',
regex: 'tekst szukany|inny\\s+wariant', // uwaga: podwójny backslash
severity: 'critical', // critical | warning | benign
desc: 'Co to znaczy, jednym zdaniem.',
hint: 'Co sprawdzić / jak naprawić.'
}Zapisz plik i odśwież stronę (F5). Wzorzec jest szukany w nazwie loggera, nazwie wątku i pełnej treści wpisu (także w wielolinijkowym stack trace).
Opcjonalne pola:
flags— flagi regexa, domyślnie"i"(bez rozróżniania wielkości liter),field—"message"albo"logger", jeśli chcesz zawęzić obszar szukania,requiresAlso— drugi regex, który też musi pasować, żeby uznać dopasowanie (używane np. do rozróżnienia „Config Server nieosiągalny" od innych błędów tego samego loggera).
To samo można zrobić z poziomu aplikacji: Ustawienia → Wzorce błędów.
Zmiany zapisane w tym oknie trafiają do pamięci przeglądarki i mają
pierwszeństwo przed plikiem. Przycisk Eksportuj do pliku generuje gotowy
patterns.js, którym możesz podmienić oryginał (np. żeby rozdać konfigurację
zespołowi), a Przywróć domyślne kasuje zmiany i wraca do pliku.
W patterns.js, tablica window.LOG_PROFILES.
Format JSON-per-linia:
{
id: 'moj-json', name: 'Mój format JSON', type: 'json',
timestampMode: 'secondsNanos', // secondsNanos | epochMillis | iso
map: { timestampSeconds:'ts_sec', timestampNanos:'ts_nano', timestamp:'',
level:'level', thread:'thread', logger:'logger',
message:'msg', context:'ctx', pid:'', app:'' },
required: ['level','msg'], // pola konieczne do uznania linii za wpis
levelAliases: { WARNING:'WARN' } // normalizacja nazw poziomów
}Format tekstowy — regex z nazwanymi grupami (?<timestamp>…), (?<level>…),
(?<pid>…), (?<app>…), (?<thread>…), (?<logger>…), (?<message>…):
{
id: 'moj-tekst', name: 'Mój format tekstowy', type: 'regex',
pattern: '^(?<timestamp>\\d{4}-…)\\s+(?<level>[A-Z]+)\\s+…(?<message>.*)$',
continuation: '^(?:\\s+at\\s|Caused by:|\\.{3}\\s+\\d+\\s+more)'
}Linie niepasujące do pattern są doklejane do poprzedniego wpisu jako
kontynuacja (stack trace, treść wielolinijkowa); continuation służy do
oznaczenia, że wpis zawiera stack trace.
- Czasy są pokazywane w strefie czasowej systemu; przycisk UTC w pasku filtrów przełącza na czas uniwersalny (przydatne przy porównywaniu z GKE).
- Pola
messagez zescapowanym XML-em (mapowania Hibernate Envers, kilka KB na wpis) są odescapowywane przez parser JSON i traktowane jako jedna wartość. Lista pokazuje pierwsze 150 znaków, panel szczegółów całość. - Aplikacja nie wykonuje żadnych żądań sieciowych.