Pliki dziennika są krytyczną częścią każdej poważnej aplikacji: jeśli logowanie w aplikacji jest dobre, pozwalają zobaczyć, które kluczowe zdarzenia miały miejsce i kiedy; jakie błędy wystąpiły; i ogólną kondycję aplikacji wykraczającą poza to, co zostało zaprojektowane w monitorowaniu. Często słyszy się o problemie, sprawdza wbudowaną diagnostykę aplikacji (otwórz konsolę internetową lub użyj narzędzia diagnostycznego, takiego jak JMX), a następnie skorzystaj ze sprawdzenia pliki dziennika.
Jeśli używasz formatu nietekstowego, natychmiast stajesz przed przeszkodą: jak czytasz dzienniki binarne? Dzięki narzędziu do odczytu dzienników, którego nie ma na serwerach produkcyjnych! A może tak, ale och, dodaliśmy nowe pole i to jest stary czytelnik. Nie testowaliśmy tego? Tak, ale nikt go tu nie wdrożył. W międzyczasie ekran zaczyna się świecić, a użytkownicy pingują Cię.
A może to nie jest twoja aplikacja, ale robisz wsparcie i myślisz, że wiesz, że to ten inny system i WTF? dzienniki są w formacie binarnym? Ok, zacznij czytać strony wiki i od czego zacząć? Teraz skopiowałem je na lokalną maszynę, ale - są zepsute? Czy wykonałem jakiś transfer niebinarny? A może narzędzie do odczytu dzienników jest popsute?
W skrócie, narzędzia do czytania tekstu są wieloplatformowe i wszechobecne, a dzienniki są często długotrwałe i czasem trzeba je czytać w pośpiechu . Jeśli wymyślisz format binarny, zostaniesz odcięty od całego świata dobrze zrozumiałych i łatwych w użyciu narzędzi. Poważna utrata funkcjonalności właśnie wtedy, gdy jej potrzebujesz.
Większość środowisk rejestrowania zawiera kompromis: bieżące dzienniki powinny być czytelne i obecne, a kompresować starsze. Oznacza to, że zyskujesz na kompresji - tym bardziej, że format binarny nie zmniejszyłby komunikatów dziennika. Jednocześnie możesz użyć mniej i grep i tak dalej.
Jakie więc potencjalne korzyści mogą wynikać z używania plików binarnych? Niewielka oszczędność miejsca - coraz mniej ważne. Mniej (lub mniej) pisze? Cóż, może - w rzeczywistości liczba zapisów będzie się odnosić do liczby zatwierdzeń na dysku, więc jeśli linie logów są znacznie mniejsze niż rozmiar bloku na dysku, to i tak dysk SSD przypisywałby nowe bloki w kółko. Binarny jest więc właściwym wyborem, jeśli:
- piszesz ogromne ilości ustrukturyzowanych danych
- dzienniki muszą być tworzone szczególnie szybko
- prawdopodobnie nie będzie trzeba ich analizować w „warunkach wsparcia”
ale to mniej przypomina zapisywanie aplikacji; są to pliki wyjściowe lub rekordy aktywności. Umieszczenie ich w pliku jest prawdopodobnie tylko krok od zapisania ich w bazie danych.
EDYTOWAĆ
Wydaje mi się, że istnieje ogólne zamieszanie między „logami programu” (zgodnie ze strukturami rejestrowania) a „rekordami” (jak w logach dostępu, logach logowania itp.). Podejrzewam, że pytanie to jest najbardziej związane z tym ostatnim, a w takim przypadku kwestia jest znacznie mniej precyzyjnie zdefiniowana. Jest całkowicie akceptowalne, aby zapis wiadomości lub dziennik aktywności miał kompaktowy format, zwłaszcza że może być dobrze zdefiniowany i używany do analizy zamiast rozwiązywania problemów. Narzędzia, które to robią, obejmują tcpdump
monitor systemu Unix sar
. Z drugiej strony dzienniki programów są znacznie bardziej ad hoc.