Rejestrowanie: dlaczego i co? [Zamknięte]

39

Nigdy nie pisałem programów, które w znaczący sposób wykorzystują logowanie. Najbardziej zrobiłem, aby uchwycić ślady stosu, gdy zdarzają się wyjątki.

Zastanawiałem się, ile innych ludzi loguje? Czy to zależy od rodzaju aplikacji, którą piszesz? Czy uważasz, że dzienniki są rzeczywiście pomocne?

Winston Ewert
źródło

Odpowiedzi:

24

Do pracy wykonałem głównie aplikacje wbudowane, logując się bezcennym narzędziem. Co najmniej błędy muszą być rejestrowane z wystarczającą ilością informacji, aby wskazać wiersz kodu. Następnie byłyby główne punkty funkcyjne w całej aplikacji. Rzeczy takie jak administrator uzyskał dostęp do komputera. Korzystamy z systemu, który umożliwia nam bardziej szczegółowe rejestrowanie. Zazwyczaj jest to specyficzne dla programistów. Może służyć do pomocy programistom podczas testowania funkcji lub może pomóc w diagnozowaniu problemu z klientem.

Osobiście korzystałem z logowania we wszystkich aplikacjach, które opracowałem. Zawsze prowadziło to do lepszego zrozumienia przepływu aplikacji. Zwłaszcza w rękach klienta. Nigdy (rzadko) nie ograniczają przypadków użycia do tych, na których testujesz.

Jeff
źródło
19

Nie sądzę, że zależy to od rodzaju aplikacji: rejestrowanie jest przydatne we wszystkich (nietrywialnych) aplikacjach. Oczywiście, w niektórych aplikacjach może być bardziej przydatny niż w innych, ale nie sądzę, aby był kiedykolwiek bezużyteczny .

W szczególności, w przypadku błędu, ślad stosu powie ci stan programu dokładnie w punkcie awarii, ale masz bardzo mało pojęcia o stanie tuż przed błędem. Informacje te mogą być bardzo przydatne w śledzeniu problemu, a rejestrowanie może zapewnić użyteczny wgląd w to. Myślę, że jest to coś, z czego mogą skorzystać wszystkie oprócz najbardziej trywialnych programów.

Innym zastosowaniem rejestrowania, które może nie być przydatne dla wszystkich programów, jest analiza statystyk. Na przykład serwer sieciowy zazwyczaj rejestruje każde przychodzące żądanie, a następnie istnieje wiele narzędzi, które mogą analizować te dzienniki i tworzyć wykresy z największymi czasami, najpopularniejszymi stronami itd. Możesz użyć tych danych do planowania wydajności („czy potrzebuję większego serwera?”) I tak dalej.

Dean Harding
źródło
9

Istnieją dwa powody rejestrowania:

  1. Diagnostyczny
  2. Rewizja

Rejestrowanie diagnostyczne zostało już omówione przez innych i nie będę więcej omawiać tej kwestii. Powiem tylko, że powinieneś mocno przemyśleć, co się stanie, jeśli wystąpi awaria dziennika? Czy zależy ci na tym, aby rzucić wyjątek w aplikacji lub zarządzać nim w inny sposób? Jest to „to zależy”, ale wiadomości poziomu rejestrowania informacji prawdopodobnie powinny zostać pominięte.

Rejestrowanie audytu jest wymaganiem biznesowym. Rejestrowanie audytu rejestruje ważne zdarzenia w systemie i jest tym, czym interesuje się zarządzanie i orły prawne. Chodzi o to, kto podpisał się na czymś, kto dokonał edycji itp. Prawdopodobnie jako administrator systemu lub programista rozwiązujący problem z systemem, prawdopodobnie jesteś tylko nieznacznie nimi zainteresowani. Jednak w wielu przypadkach tego rodzaju rejestrowanie jest absolutnie częścią transakcji i powinno zakończyć się niepowodzeniem całej transakcji, jeśli nie można jej zakończyć.

Myślenie o tych dwóch osobno jest dla mnie pomocne nie tylko dlatego, że jedno jest „opcjonalne”, a drugie obowiązkowe, ale ponieważ w zależności od wymagań może być konieczne ich osobne wdrożenie. Może się zdarzyć (czasami), że oba są owocami, ale jedno to jabłka, a drugie pomarańcze. Zwykle jednak pojedyncza struktura rejestrowania obsługuje oba te elementy.

MIA
źródło
To brzmi jak różnica między prowadzeniem dziennika i kopiami umów najmu.
shuhalo
8

W większości zadań serwera rejestrowanie jest kluczowe, ponieważ administrator zwykle nie jest obecny, gdy coś się dzieje, więc musi sprawdzić po fakcie.

Ale facet z Google powiedział mi kiedyś, że procesy serwera nie rejestrują; zamiast tego są „oprzyrządowane”; oznacza to, że każdy proces ma zaczepy lub porty (nie określił mechaniki), w których inne procesy mogą się zatrzasnąć, aby zapytać o parametry i statystyki. Są to te procesy monitorowania, które przechowują wiele rzeczy w dziennikach, zaletą jest to, że informacje, które otrzymują, nie „otwierają pliku”, „zapisują”, „pobierają”; dostają takie rzeczy jak „45 453 otwarte pliki”, „653 klientów usługi X”, „344 ms średnia odpowiedź na zapytanie Y”

Z pewnością jest to inne podejście, o którym staram się pamiętać, opiekując się moimi systemami, nawet jeśli są one o kilka rzędów wielkości mniejsze.

Javier
źródło
4

Pochodzę z aplikacji N-Tiered firmy Winforms, która rejestrowała wszystko.

To nie było bardzo przydatne.

Jasne, rejestrowanie wyjątków jest świetne; ale po co logować je na maszynie klienta, skoro można wysłać e-mailem wyjątek do zespołu programistów?

Zapisywanie informacji łatwo zmienia się w uzależnienie, którego wartość rzadko jest uzasadniona. W każdej sytuacji, w której możesz logować się bezpłatnie, lepiej jest zbierać ukierunkowane informacje i wysyłać je tam, gdzie potrzebujesz.

George Stocker
źródło
1
Czy nadal możesz wysłać je pocztą e-mail, jeśli aplikacja ulegnie awarii?
Pemdas
2
Co się stanie, jeśli e-mail nie działa?
3
co jeśli maszyna, na której działa, nie ma połączenia z Internetem?
Pemdas,
2
Nie wierzę w to, dlatego ciężko mi jest. Zasadniczo powiedziałeś, że wszystkie dzienniki powinny być wysłane e-mailem do zespołu programistów, co często nie jest możliwe.
Pemdas,
3
@Pemdas To proste: tam, gdzie możesz to zrobić, lepiej po prostu nie chcąc rejestrować wszystkiego i nie wysyłać go nikomu. Dzienniki mają znaczenie tylko wtedy, gdy ktoś je regularnie sprawdza i tylko wtedy, gdy loguje się na tyle, by być przydatnym. Zbyt często widzę, że programiści rejestrują wszystko, a nawet na to nie patrzą. Naprawdę haniebne.
George Stocker
4

Przechwytywanie informacji o wyjątkach jest koniecznością, ponieważ może być do pewnego stopnia bardzo pomocne. Czasami jednak informacje o wyjątkach nie są wystarczające, zwłaszcza jeśli użytkownik / klient aplikacji nie może zgłosić błędu z poprawnymi informacjami.

Czy rejestrowanie ogranicza się tylko do rejestrowania informacji o błędach?

W moim przypadku (aplikacja internetowa) zawsze loguję, która strona jest odwiedzana, kiedy, co klikają, gdzie ip i przeglądarka itp. Loguję nawet całkowity czas ładowania dla każdej wizyty na stronie, dzięki czemu mogę wiedzieć, które strony są wolne i potrzebuje optymalizacji. więc mogę powiedzieć, że loguję jak najwięcej.

na początku nie miałem pojęcia, jakie będzie to miało znaczenie. ale najwyraźniej jest bardzo pomocny w wielu sprawach (innych niż debugowanie):

  • rozumienie zachowania użytkownika
  • ocena akceptacji nowej funkcji
  • rozróżniać wczesnych użytkowników, oszustów lub potencjalnych klientów

Myślę, że rejestrowanie może zyskać na znaczeniu, jeśli uwielbiamy w nim wykopywać dane statystyczne.

Anwar Chandra
źródło
2

Jestem programistą w firmie, której produkty są wdrażane za granicą. Gdy przychodzi zespół wsparcia z pytaniem o definicję problemu, moimi jedynymi narzędziami do diagnozy są moje pliki dziennika i kopia bazy danych klienta. Korzystając z bazy danych i mojego środowiska programistycznego, mam możliwość odtworzenia błędnego przypadku, ponieważ loguję przychodzące dane do mojego modułu i powiązanych działań. Jeśli mogę odtworzyć błąd za pomocą zebranych danych, mogę to naprawić za pomocą debugowania. Gdybym nie miał plików dziennika, musiałbym polegać na opisie klienta lub zespołu pomocy technicznej na temat tego, co dzieje się w danym przypadku (co ma dużą szansę na wprowadzenie w błąd).

Po drugie, rejestrowanie daje mi możliwość wykrycia wąskich gardeł mojego modułu we wdrożonej witrynie, ponieważ rejestruję datę i godzinę niektórych działań, a następnie mogę sprawdzić, które działanie zużywa ile czasu.

Ponadto załóżmy, że nasze rozwiązanie składa się z 6 modułów i widzę dzienniki błędów w moich plikach dziennika dotyczące przekroczeń limitu czasu bazy danych. Jeśli te błędy zostaną zarejestrowane również w 5 innych modułach, prawdopodobieństwo, że jest to problem związany z serwerem SQL, wzrasta. Jeśli jest to rejestrowane tylko w moim module, prawdopodobieństwo, że moje zapytania są błędne, rośnie. Myślę, że tego rodzaju rzeczy są przydatnymi wskaźnikami.

To, jakie dane widzę w moich plikach dziennika, zależy od konfiguracji poziomu dziennika. Jeśli jest to nowy produkt, ustawiamy poziom dziennika na „Wszystkie”, aby zebrać jak najwięcej danych. Ale kiedy ulepszamy produkt, możemy chcieć utrzymać poziom dziennika na poziomie „Błąd”, aby rejestrować tylko błąd, ale nie dzienniki poziomu informacji itp.

aslisabanci
źródło
2

Rejestrowanie jest przydatne w przypadku informacji, których nie można uzyskać za pomocą innych programów:

  • Przechwyć ślady stosu (masz ten)
  • Przechwytywanie danych przetwarzanych po awarii aplikacji. Pamiętaj, że debuggery pomagają tylko wtedy, gdy są obecne w momencie awarii.
  • Informacje o profilowaniu. Jeśli nie możesz uruchomić profilera w środowisku produkcyjnym, obszerne rejestrowanie, w tym sygnatury czasowe, może pomóc w ustaleniu, gdzie upłynął czas. Nawet niemożność rozpoznania może pomóc ci zidentyfikować, że program znajduje się poza Twoim programem (np. Uruchamianie odśmiecania).
  • Nie oczekuje się statystyk podczas pisania programu. Poproszono mnie o przedstawienie wykresów zachowania w czasie dla interwałów interesujących z innych powodów. Niezbędne dane można wyodrębnić z plików dziennika za pomocą trików grep + awk + perl ninja.

Uwaga: Chcesz mieć co najmniej DWIE pliki dziennika.

  • Jeden na poziomie DEBUG - zapewniający wszystkie informacje, jakie możesz sobie wyobrazić, których będziesz kiedykolwiek potrzebować (w tym INFO i wyżej). Jeśli to zdecydowanie za dużo, rozważ dodatkowy poziom ŚLEDZENIA.
  • Jeden na poziomie INFO - zapewniający przegląd systemu 10000 metrów. Tutaj znajdują się ważne kamienie milowe.

INFO jest zawsze włączony. DEBUG jest włączony w razie potrzeby.

Napisz kod logowania, przewidując, że pewnego dnia będziesz musiał debugować sytuację, w której WSZYSTKO, co masz, to plik dziennika, a prawidłowe wykonanie tej czynności może być różnicą między zwolnieniem z pracy a awansem.

Dla dodatkowej mili, wszystkie wywołania funkcji dodają swoje parametry do dowolnego śladu stosu, w Javie za pomocą

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

Podejście to zasadniczo ulepsza stos wywołań o wartości parametrów i może umożliwić analizę sytuacji tylko za pomocą śledzenia stosu i bez konieczności przeglądania plików dziennika.


źródło
+1 za „Napisz kod rejestrujący, przewidując, że pewnego dnia będziesz musiał debugować sytuację, w której WSZYSTKO, co masz, to plik dziennika, a prawidłowe wykonanie tej czynności może być różnicą między zwolnieniem z pracy a awansem”.
Marcie
1

Poleciłbym również, aby wszystkie nietrywialne aplikacje korzystały z rejestrowania wielopoziomowego.

Z powodów, które podali inni, jest to nieocenione narzędzie do rozwiązywania problemów z aplikacją.

W niektórych przypadkach rejestrowanie jest niezbędne, na przykład w aplikacjach finansowych i innych domenach, które wymagają dzienników aktywności, dla bezpieczeństwa, wskaźników użytkowania i audytu.

ocodo
źródło
1

Z pewnością zależy to od rodzaju budowanego systemu.

Jeśli piszesz samodzielną aplikację komputerową, taką jak edytor tekstu, prawdopodobnie nie potrzebujesz żadnego logowania.

Jeśli piszesz system osadzony, nie możesz żyć bez logowania. W przeciwnym razie, gdy urządzenie osadzone zawiesi się, nie masz pojęcia, dlaczego. Konieczne jest także rejestrowanie za każdym razem, gdy system obejmuje wiele procesów lub wiele fizycznych maszyn komunikujących się ze sobą. Ponownie, gdy system się zawiesi, musisz wiedzieć, która jego część umarła, kiedy i dlaczego. Musisz być w stanie porównać dzienniki, aby ustalić, czy dane trafiły z jednego procesu do drugiego. Z tego samego powodu musisz rejestrować się za każdym razem, gdy twój system ma działać przez dłuższy czas bez dużej bezpośredniej interakcji użytkownika.

Dima
źródło
1

Logowanie jest zawsze przydatne. Ale przy wdrażaniu należy pamiętać, że niekoniecznie ty, który czyta dzienniki. Być może jest to jakiś administrator, użytkownik końcowy, klient, zespół wsparcia ...

Dlatego nie tylko zapisuj ślady stosu, ale także dodatkowe informacje, które mogą być interpretowane przez osoby niebędące programistami. Gdy Twoja aplikacja jest obsługiwana przez inne grupy, pomocne jest również zapisanie unikalnych kodów błędów w dziennikach. Może to ułatwić wsparcie, automatyzację ...

Kolejny punkt z perspektywy administratora: Pomyśl o rotacji logów.

chrześcijanin
źródło