2009-10-28 12 views
6

Zastanawiam się, jakiego rodzaju informacje powinny być rejestrowane w pliku, gdy aplikacja zostanie przeniesiona do środowiska produkcyjnego? Poza rejestrowaniem wyjątków i błędów ...Co należy rejestrować/śledzić w środowisku produkcyjnym?

Czy należy rejestrować początek i koniec każdej metody? Początek i koniec działającej usługi? Za każdym razem, gdy aplikacja zapisuje dane w bazie danych lub wywołuje usługę zewnętrzną? Próbuję znaleźć równowagę między rejestrowaniem/śledzeniem wszystkiego i tylko błędami rejestrowania.

+0

Niedawny blog mojego kolegi omawiający właśnie to: https://engblog.nextdoor.com/2015/08/05/dynamic-logging/ – Mikhail

Odpowiedz

2

To naprawdę zależy od ciebie, nie istnieją żadne twarde & szybkie przepisy.

Kilka miesięcy temu byliśmy pracujących w tej aplikacji Java i używane log4j do logowania, w log4j byliśmy w stanie określić w kodzie nasze logi albo jako debugowania, ostrzeżenie, błąd, informacji itp

Nasz rejestrowanie debugowania był prawie na wszystkich uruchamianych funkcjach & koniec, każda udana, nieudana transakcja była rejestrowana jako "info", "błąd" w wyjątkach były rejestrowane również.

Po przeniesieniu aplikacji do środowiska produkcyjnego po około miesiącu wyłączyliśmy wszystkie rejestrowanie debugowania za pomocą plików .properties bez ponownego uruchamiania aplikacji. & Dobrze nam było pójść.

+1

Czy to literówka "przełączona"? wyłączony? – solotim

0

Lubię używać różnych poziomów. Najmniej szczegółowa pokazuje uruchamianie i wyłączanie usługi, a także błędy i wyjątki. Najbardziej szczegółowe informacje można znaleźć pod numerem , pokazując wartość każdej zmiennej lokalnej, wejścia/wyjścia funkcji i tak dalej.

Im więcej szczegółów można uzyskać łatwiej, tym mniej kopać i mniej prawdopodobne, że jesteś , aby przeskoczyć na samolot, aby przejść do problemu. . . .

K

4

W środowisku produkcyjnym domyślnie ustawiłem logowanie na "INFO" (przy użyciu log4net), a na tym poziomie loguję wystarczające informacje, aby mieć bardzo duże szanse na zdiagnozowanie ewentualnych błędów. Co to jest "wystarczająca" informacja? Cóż, wszystko zależy od twojego systemu. W naszym systemie loguję punkty wejścia i wyjścia z najważniejszych metod, w tym ich parametry wejściowe i wartości zwracane (chyba że jest to dużo danych). Zgadzam się na 5-10% wydatków na logowanie (ale powinieneś to zmierzyć).

Moja perferred format jest tak: wejście

Metoda:

-> myMethod (1, "arg1")

Metoda exit:

< -MyMethod (1 " arg1 ") = true

Strzałki oznaczają, że mogę łatwo sprawdzić, czy jest to wejście czy wyjście. Uwzględniając argumenty i wartość zwracaną otrzymuję najbardziej krytyczne dane do diagnozowania błędów. Mam tylko jeden punkt zwrotny z moich metod, więc nie muszę się martwić o wiele punktów wyjścia dla mojego logowania.

Logując wejście/wyjście metody, stwierdzam, że nie muszę logować się zbyt wiele - jeśli twój kod zostanie poprawnie rozłożony na metody, to dokumentuje to przepływ wykonawczy przez twoją aplikację.

Nie popełnij błędu, nie rejestrując wystarczających informacji, ponieważ martwi Cię wydajność - zmierz, abyś był zadowolony z kosztów ogólnych, ale masz pewność, że rejestrujesz się na tyle, by zdiagnozować usterki wyłącznie w oparciu o informacje to jest w dzienniku. To, czego nie chcesz robić, to zmienić rejestrowanie na bardziej szczegółowe: po Twój klient zgłosił usterkę, a następnie mam nadzieję, że usterka wystąpi ponownie.

Używam również poziomu logowania DEBUG, który rejestruje praktycznie wszystko. Jest to używane tylko w dev/test, lub może w produkcji, ale tylko po konsultacji z klientem.

+0

Po prostu na marginesie, powinieneś przeczytać na AOP - sprawiłoby, że logowanie inwazji przed i po wywołaniu byłoby banalne. Dodatkowo może usunąć obszary powielania i ograniczenia SISO. –

+0

Oczywiście, można to zrobić za pomocą AOP, ale mam ważne powody, dla których nie używam AOP, dlatego używam techniki, którą opisałem. – Polyfun

Powiązane problemy